我有2个java类" LegacyDAO"和" NewDAO"实现Runnable。在另一个班级"测试"我们创建每个LegacyDAOObj和NewDAOObj的一个对象。
Class Test {
public static void main(String args[]) {
LegacyDAO legacyDAOObj= new LegacyDAO();
NewDAO newDAOObj= new NewDAO();
Thread legacyDBThread= new Thread(legacyDAOObj);
Thread newDBThread= new Thread(newDAOObj);
}
}
legacyDBThread和newDBThread之间是否有任何关系? 如果我想让newDBThread执行一些代码然后等待legacyDBThread完成然后继续运行。如何实现这一目标?
答案 0 :(得分:2)
wait()
和notify()
API在此处非常有用。你可以在两个类中共享一些对象,并在这些共享对象上使用wait-notify
来同步两个线程。
答案 1 :(得分:1)
您可以使用倒计时锁存器。使用计数1创建倒计时锁存器,将其传递给legacyDAOObj
。在legacyDAOObj
中执行逻辑后,倒计时锁存器。直到逻辑在legacyDAOObj
,newDAOObj
等待执行。
答案 2 :(得分:0)
如果您只想等待线程结束,请使用Thread#join(),这似乎是实现您想要的最简单方法。
答案 3 :(得分:0)
CountdownLatch
将是您最好的选择。 newDaoObj
完成后,legacyDaoObj
将在主线程中继续。
public static void main(String[] args) {
CountDownLatch start =new CountDownlatch(1);
LegacyDAO legacyDAOObj= new LegacyDAO();
NewDAO newDAOObj= new NewDAO();
new Thread(new Worker(legacyDAOObj)).start();
try {
start.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
newDAOObj.doSomething();
}
public static class Worker implements Runnable{
LegacyDAO dao;
public Worker(LegacyDAO dao) {
this.dao = dao;
}
@Override
public void run() {
try {
start.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
dao.doSomething();
start.countDown();
}
}