2 回答
TA贡献1827条经验 获得超8个赞
printAnotherMessage
在此示例中,休眠 5 秒的同步块之间没有同步,这就是主线程休眠 1 秒然后main Thread
无需任何等待即可打印的原因。
您可能打算创建printAnotherMessage
一个同步方法。在这种情况下,主线程将等待,直到另一个线程完成测试对象上同步块的执行。
TA贡献1872条经验 获得超3个赞
没有同步,test.printAnotherMessage();因此假设时机正确,它将首先执行。4 秒已经很多了,应该足够了。
synchronized (test) {
test.printAnotherMessage();
}
Thread.sleep不过,这很少是一个好的选择。更合适的方法是
Test test = new Test();
new Thread(() -> {
synchronized (test) {
test.printMessage();
test.notify();
}
}).start();
synchronized (test) {
test.wait();
test.printAnotherMessage();
}
我在这里玩一个危险的游戏,因为我假设主线程将进入同步块并在创建另一个线程并进入其同步块wait() 之前执行。这是合理的,因为创建线程需要一些时间。
Test test = new Test();
new Thread(() -> {
try {
// a lot of time to let the main thread execute wait()
Thread.sleep(500);
synchronized (test) {
test.printMessage();
test.notify();
}
} catch (InterruptedException e) {}
}).start();
synchronized (test) {
test.wait();
test.printAnotherMessage();
}
添加回答
举报