[英]Do ArrayBlockingQueue wrapper methods need to be synchronized?
我有两个线程,一个调度消息,另一个调度消息。 简单,常见。 我使用ArrayBlockingQueue
进行同步,但不希望调度程序直接访问worker消息队列 - 我使用了一个包装器。 问题是是否应该将setter声明为synchronized
。
public class Worker implements Runnable{
protected final ArrayBlockingQueue<ByteBuffer> messages = new ArrayBlockingQueue<ByteBuffer>(16);
public synchronized void putMessage(ByteBuffer msg) throws InterruptedException{
messages.put(ByteBuffer);
}
}
如果只需要一个线程来访问此方法中的非线程安全共享状态(或者必须在原子上对共享状态进行多次修改),则必须同步putMessage
方法。
所有方法都是在ArrayBlockingQueue
上调用一个方法,该方法被精确地设计为由多个线程同时访问。
该方法不需要同步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.