本帖最后由 Evenque 于 2011-12-09 14:33:16 编辑

解决方案 »

  1.   

    很明显这个ServerInstance类属于VO,用于传递参数使用,是不应该给他加上线程同步的。不知道你具体的业务逻辑,个人认为每个线程调用前都重新new 一个ServerInstance 的实例。另外单独使用 Volatile 变量 不足以实现互斥锁,Volatile不具有原子性。
      

  2.   

    基本类型使用volatile关键字,实现不了原子操作的功能吗? 我的业务逻辑是这样的:
    这是一个服务器扫描和监控的程序。
    Server类是对服务器的一个描述,IP、端口,是否需要扫描等信息。
    ServerInstance里面有一个Server对象,如何根据是否需要扫描标识,创建一个线程按照固定的间隔时间用来扫描此服务器。会有好几个ServerInstance对象,都保存在一个Map里面。另外会有用户会在另外一个线程里面更改各个Server对象的是否需要扫描标识,而ServerInstance里面的扫描线程会根据Server对象的是否需要扫描标识来决定扫描线程是继续还是停止。用户也可能新增加一个Server,这时候就得新增一个ServerInstance,开始扫描。当然,也会删除一个Server。
      

  3.   

    ServerInstance{ private Server server;
     public synchronized String getServerProp(){
      server.getProp();
     }
     public synchronized void setServerProp(String prop){
      server.setProp(prop);
     }
    }我想问下,如果这样用synchronized,是不是把整个server对象都锁住了?
    其他线程想访问server对象的其他属性是,是不是也得等待?