关于JAVA2D地形检测的问题

一个数组Point()型dixing_point[],每个point的x,y都是随机生成,算法思路是遍历所有point,如果角色坐标x,y在任何point的20范围以外,储存当前x,y的位置为save_x,save_y,如果进入任何point范围,则不作记录,反过来将x,y读取成之前记录的坐标。
我大概知道算法的漏洞在哪里,在系统判断point1坐标的时候,我可能进入了ponit2并记录了坐标。但循环如此之快,按理来说应该有可能实现。
现在的实际情况是:10个随机生成的障碍,总有一个且只有一个确实起作用了。其它9个障碍和空气一样。。。请求高手们告诉我为什么T_T
地形算法如下:

    private void checkDixing(){
        Thread checkThread = new Thread(new Runnable(){  
            public void run(){
                while(true){
                    for(Point i:dixing_point){
                        //System.out.println(i);
            if(Math.abs(me_x - i.x)<20 && Math.abs(me_y - i.y)<20){
                x=save_x;
                y=save_y;
            }
                else{
                    save_x=x;
                    save_y=y;
                }
                    }
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }}});
        checkThread.start();
        }

对于x,y,save_x,save_y赋值,应该添加同步操作,因为是不同线程去处理,否则不能保证两个操作处理的是最新的x,y的值。

算法逻辑问题
循环里边,save_x和save_y,一定等与x,y,因为me_x和me_y一定会在一个障碍点的范围外。
x和y,又被save_x和save_y赋值后(如果me_x和me_y就是x,y的话)。

解决:感觉程序设计问题,不用线程去处理当前位置(因为任务移动有明确的事件,参考观察者模式去设计)
每当键盘操作产生新的人位置x,y,就判断是否在所有障碍点范围内。

x,y两个参数是外部定义的,是否有其他线程给他们赋值,如果有,是否要做同步操作?
用java的volatile 修饰x,y,或者添加synchronized,保证在修改x,y时是最新的值。
程序不是很全,有点蒙的感觉啊,试试