同步块和while循环最佳排序

时间:2019-02-13 12:12:31

标签: java concurrency synchronization synchronized

如果我正在等待类似的情况(请注意:currentAtomicInteger,而targetint):

while (current.get() < target) {
    try {
        synchronized (current) {
            current.wait();
        }
    }
    catch (InterruptedException ie) {}
}

那么同步的对象应该放在里面(如上所述)还是外面(像这样)?

synchronized (current) {
    while (current.get() < target) {
        try {
            current.wait();
        }
        catch (InterruptedException ie) {}
    }
}

我的问题是,以上两段代码之间的实用/功能区别是什么?何时应该在另一段代码上使用?

编辑:当另一个线程执行以下操作时,退出循环

if (current.incrementAndGet() >= target) {
    synchronized (current) {
        current.notify();
    }
}

1 个答案:

答案 0 :(得分:0)

这取决于代码的critical section是什么,而不是最佳实践。


但是,最好将关键部分代码的长度最小化,因为一次只允许一个线程输入它。否则,为了达到极限,您可以同步整个程序并使其安全。