【发布时间】:2020-07-24 19:24:49
【问题描述】:
在使用并发 API 时是否需要使用 synchronized?也就是说这有区别吗
class MessageQueue {
Queue<String> q = new LinkedList<>();
public void post(String msg) {
synchronized (q) {
q.add(msg);
}
}
public String get() {
synchronized (q) {
return q.poll();
}
}
}
这个,
class MessageQueue2 {
Queue<String> q = new ConcurrentLinkedQueue<>();
public void post(String msg) {
q.add(msg);
}
public String get() {
return q.poll();
}
}
还有这个?
class MessageQueue3 {
Queue<String> q = new ConcurrentLinkedQueue<>();
public void post(String msg) {
synchronized (q) {
q.add(msg);
}
}
public String get() {
synchronized (q) {
return q.poll();
}
}
}
【问题讨论】:
-
队列的读写不必同步。如果您想用新的 Queue 对象替换 Queue 对象,您只需要同步即可。
标签: java multithreading java.util.concurrent