我有一个servlet在应用服务器启动时自动启动,并且在它的init()中,我正在创建另一个线程:

init(){ new FooThread().start() }


在FooThread()中,我想定期检查DB值的状态,然后根据该值进行Web服务调用。当这两个任务完成时,我希望线程休眠以等待一段时间,然后重复执行。
这个周期将永远持续下去。

FooThread:

public class FooThread implements Runnable{
  Thread t;

  FooThread(){
    t = new Thread(this, "FooThread");
  }

 public void start(){
   t.start();
 }

  public void run() {
    try{
      while(true){
        //do the db check, then conditionally do the web services call
        logger.info("*** calling sleep() ***");
        Thread.sleep(50000);
        logger.info("*** now awake ***");
      }
    } catch (InterruptedException e) {
      System.out.println("*** FooThread interrupted");
    }
  }
}

最佳答案

不要在构造函数中启动线程,因为它可能导致竞争状况和不确定的行为。而是在构造对象之后调用start()方法。

编辑:

不好的原因是因为您可能在this指针之前发布了
构造函数已完成。

07-26 07:42