线程可变干扰

时间:2011-03-02 10:15:46

标签: java java-me thread-safety

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方法等待?

4 个答案:

答案 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()方法实在是太简单了。