在Java中同步2个线程的更简单方法?

2024-03-13

我不想确定主线程中的某些代码将在辅助线程中执行某些代码之后执行。这是我得到的:

    final Object lock = new Object();
    final Thread t = new Thread(new Runnable() {
        public void run() {
            synchronized(lock) {
                System.out.println("qwerty");
                lock.notify();
            }
        }
    });

    synchronized(lock) {
        t.start();
        lock.wait();
    }

    System.out.println("absolutely sure, qwerty is above");
  1. 它是正确的解决方案吗?
  2. 还有更短的方法可以做到同样的事情吗?

notify() and wait()确实是低级同步原语。

您应该尽可能使用更高级别的抽象,例如在本例中,倒计时锁存器.

以下只是一个应该帮助您入门的示例(例如,此处未考虑超时问题):

    final CountDownLatch latch = new CountDownLatch(1);
    final Thread t = new Thread(new Runnable() {
        public void run() {
            System.out.println("qwerty");
            latch.countDown();
        }
    });

    t.start();
    latch.await();

    System.out.println("absolutely sure, qwerty as been printed");

低级的东西,比如wait and notify实际上只是您不应该关心的低级 Java 特性(除非您正在编写并发 API)。

此外,我建议阅读这本精彩的书:Java 并发实践.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Java中同步2个线程的更简单方法? 的相关文章

随机推荐