我想知道以下代码中的 synchronized 关键字是做什么的,一个是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;
}
}
答案 0 :(得分:0)
Java中的synchronized
关键字可确保一次只能在一个方法中使用一个线程。如果您熟悉其他并发模式,则相当于在方法周围放置信号量标志。