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)
不要在构造函数中启动线程,因为它可能导致竞争条件和不确定的行为.而是start()在构造对象后调用该方法.
编辑:
它之所以糟糕是因为你可以this在构造函数完成之前发布指针.
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |