一个web应用,部署在两台服务器(resin),同一个数据库。
有一个线程,用一个task去定期每两小时run一次,清理数据。
我是不是应该在这个run上加上synchronized,避免两台服务器都会执行run?按理说synchronized是给多个线程要调用的地方加锁,和我这个情况好像不太一样
这里有点糊涂,请教高手。

解决方案 »

  1.   

    如果这个线程在各自的web应用中,在两台服务器上运行,
    你怎么能对他们进行同步控制呢?
    多虑了吧。
      

  2.   


    1、如果你2台服务器都运行task,那么肯定不是2小时运行一次
    2、如果你的需求是2小时运行一次,有一台及其执行不就够了吗?
      

  3.   

    加了也没用,因为是两台机器,不同的jvm,根本synchronized还是采用wangyan7777的方法设置一个field来控制运行权限吧我用过比较类似的方法处理,设置一个field来表示谁正取得运行权限,default是null的,两台机器抢着去把自己的server name写进去,我用了oracle的for update,connection也set成了not auto commit进一步防止脏数据的出现。