线程代码......有什么不妥之处,必须使用java 1.4

bmw*_*128 1 java multithreading

我有一个servlet在app服务器启动时自动启动,在init()中,我正在创建另一个线程:

init(){ new FooThread().start() }
Run Code Online (Sandbox Code Playgroud)

在FooThread()中,我想定期检查数据库值的状态,然后根据值进行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");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Ami*_*ani 6

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

编辑:

它之所以糟糕是因为你可以this在构造函数完成之前发布指针.