【发布时间】:2019-04-15 04:08:10
【问题描述】:
我想知道下面代码中的同步关键字是做什么的,一个在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 multithreading synchronized