gpt4 book ai didi

java - 如何让两个线程互相等待来执行任务?

转载 作者:行者123 更新时间:2023-12-01 17:25:06 28 4
gpt4 key购买 nike

在网上解决一些问题时,我发现了这个。不知道如何解决这个问题。

我希望线程 1 首先运行并计算 foo 并等待,然后希望线程 2 运行并计算 foo,最后希望线程 1 继续并打印 foo 并完成执行。

我从过去 1 个小时以来一直在思考这个问题,但无法解决。任何帮助表示赞赏。谢谢。

public class ThreadTest {

private static class Thread01 extends Thread {

private Thread02 _thread02;
public int foo = 0;

public void setThread02(Thread02 thread02) {
_thread02 = thread02;
}

public void run() {

try {
for (int i = 0; i < 10; i++) foo += i;
synchronized (this) { this.notify(); }
synchronized (_thread02) { _thread02.wait(); }
System.out.println("Foo: " + _thread02.foo);
} catch (InterruptedException ie) { ie.printStackTrace(); }
}
}


private static class Thread02 extends Thread {

private final Thread01 _thread01; public int foo = 0;

public Thread02(Thread01 thread01) {
_thread01 = thread01;
}

public void run() {

try {
synchronized (_thread01) { _thread01.wait(); }
foo = _thread01.foo;
for (int i = 0; i < 10; i++) foo += i;
synchronized (this) { this.notify(); }
} catch (InterruptedException ie) { ie.printStackTrace(); }
}
}

public static void main(String[] args) throws Exception {

Thread01 thread01 = new Thread01();
Thread02 thread02 = new Thread02(thread01);
thread01.setThread02(thread02);

thread01.start();
thread02.start();
thread01.join();
thread02.join();
}
}

最佳答案

在没有仔细查看您的代码的情况下,我认为它的工作原理如下:

线程 1 计算 foo,创建并启动线程 2。线程 1 调用 thread2.join()。这会使线程 1 暂停,直到线程 2 完成。然后继续线程1的最终代码。

无需通知,只需一个简单的 join()

关于java - 如何让两个线程互相等待来执行任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15605756/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com