我有两个线程,一个负责派发消息,另一个负责解析它们。这是一种简单、常见的情况。我使用 ArrayBlockingQueue
进行同步,但不希望派发器直接访问工作者的消息队列 - 所以我使用了一个包装器。问题在于是否应该声明 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);
}
}