是否需要同步ArrayBlockingQueue包装器方法?

Gre*_*reg 4 java multithreading

我有两个线程,一个调度消息,另一个调度消息.简单,常见.我ArrayBlockingQueue用于同步,但不希望调度程序直接访问工作人员消息队列 - 我使用包装器.问题是是否应该声明二传手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);
    }
}
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 6

putMessage方法将必须同步,如果只有一个在所需的时间线程访问非线程安全共享状态这种方法内(或将不得不作出一个共享状态若干修改原子).

所有方法都是在一个方法上调用一个方法ArrayBlockingQueue,它被精确地设计为由多个线程同时访问.

该方法不需要同步.