这个问题在这里已有答案:
我想知道在下面的代码中同步关键字是做什么的,一个是在send()
方法,另一个是在receive()
方法。
在哪个竞争条件场景/场景中,synchronized关键字想要阻止?
非常感谢你!
public class Data {
private String packet;
// True if receiver should wait
// False if sender should wait
private boolean transfer = true;
public synchronized void send(String packet) {
while (!transfer) {
try {
wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
Log.error("Thread interrupted", e);
}
}
transfer = false;
this.packet = packet;
notifyAll();
}
public synchronized String receive() {
while (transfer) {
try {
wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
Log.error("Thread interrupted", e);
}
}
transfer = true;
notifyAll();
return packet;
}
}
Java中的synchronized
关键字确保一次只能在一个方法中使用一个线程。如果您熟悉其他并发模式,它相当于在方法周围放置一个信号量标志。
阅读更多相关信息,并提供一些有用的示例:https://www.baeldung.com/java-synchronized