java中不同类对象的线程

时间:2014-05-07 07:08:48

标签: java multithreading

我有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完成然后继续运行。如何实现这一目标?

4 个答案:

答案 0 :(得分:2)

wait()notify() API在此处非常有用。你可以在两个类中共享一些对象,并在这些共享对象上使用wait-notify来同步两个线程。

答案 1 :(得分:1)

您可以使用倒计时锁存器。使用计数1创建倒计时锁存器,将其传递给legacyDAOObj。在legacyDAOObj中执行逻辑后,倒计时锁存器。直到逻辑在legacyDAOObjnewDAOObj等待执行。

答案 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();
    }
}