我有一个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
指针之前发布了
构造函数已完成。