繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM