Thread t1= new Thread(new Runnable() {
public void run() {
//perform Database stuff
}
});
t1.start();
initCache();//perform other Database stuff (Can this code be executed while thread 1 is running?)
如何确保在t1完成后强制initCache方法等待?
答案 0 :(得分:5)
不要在另一个线程中运行它来开始吗?
你可以调用t1.join()
但实际上,如果你想运行任务X然后运行任务Y,只需在同一个线程中运行它们......
答案 1 :(得分:0)
如果您希望initCache()
仅在 t1
完成后运行,那么为什么首先启动t1
?
只需执行run()
中的代码,然后执行initCache()
。
如果在t1.start()
和initCache()
之间发生了其他一些操作,那么您可以使用t1.join()
等待t1
完成,然后再致电initCache()
。< / p>
答案 2 :(得分:0)
使用 join()?真的吗? 90年代是否因为他们希望恢复他们的低级同步设施而被召集?
更高级别的东西怎么样?像CountDownLatch一样?
final CountDownLatch cdl = new CountDownLatch(1);
Thread t1= new Thread(new Runnable() {
public void run() {
//perform Database stuff
cdl.countDown();
}
});
t1.start();
cdl.await();
initCache();
也可以配置超时等。
答案 3 :(得分:-1)
while (t1.isAlive()) {
try {
Thread.currentThread().sleep();
}
catch (InterruptedException e) {
//check again
}
}
initCache();
应该这样做。虽然实际上t1.join()
方法实在是太简单了。