java - 我会在这里同步什么?

标签 java multithreading synchronization

首先是代码片段...

final public class ExampleClass {

final public class OperationQueue {

    final private ConcurrentLinkedQueue<Operation> queue = new ConcurrentLinkedQueue<>();

    public Operation newOp(Command command) {
        Operation op = new Operation(command);
        queue.add(op);
        return op;
    }

    private boolean isEmpty() {
        return queue.isEmpty();
    }

    private Operation remove() {
        return queue.remove();
    }

}
final public OperationQueue opQueue = new OperationQueue();

public void doSomething() {

     synchronized (opQueue.queue) { // or synchronized(opQueue) ?
        while (!opQueue.isEmpty()) {
            process(opQueue.remove());
        }
    }
 }

}

我的问题...

我需要同步什么? opQueue.queue?还是 opQueue?还是没关系?

实际上 opQueue.queue 甚至只能通过它位于 内部/嵌套类 中的怪癖来访问。

最佳答案

poll() 可能更好在你的情况下

public void doSomething() 
{
    Operation op;
    while( null != (op=queue.poll()) )
        process( op );
}

关于java - 我会在这里同步什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33248564/

相关文章:

python | tkinter 和线程 : "main thread is not in main loop"

c++ - 如何在 Linux 上的 C++ (pthread) 多线程程序中查找(段错误)错误?

java - Android - 创建同步计时器

java - 这是 Java 类的多个函数的线程化和同步的好方法吗?

java - 如何为多个复选框创建一个 Action 事件?

java - 业务逻辑验证模式和建议

java - 使用 Prometheus 监控 Java 网络应用程序

java - 检查Web服务是否正在运行

c# - C# 中的线程和异步操作

javascript - 用户脚本的两个实例如何在框架之间进行通信?