小编典典

同步与锁定

all

java.util.concurrentAPI 提供了一个名为 as 的类Lock,它基本上会序列化控件以访问关键资源。它给出了 和
park()方法unpark()

如果我们可以使用synchronized关键字和使用wait()方法,我们可以做类似的事情notify() notifyAll()

我想知道其中哪一个在实践中更好,为什么?


阅读 119

收藏
2022-07-02

共1个答案

小编典典

如果您只是锁定一个对象,我更喜欢使用synchronized

例子:

Lock.acquire();
doSomethingNifty(); // Throws a NPE!
Lock.release(); // Oh noes, we never release the lock!

你必须在try{} finally{}任何地方明确地做。

而使用同步,它非常清楚并且不可能出错:

synchronized(myObject) {
    doSomethingNifty();
}

也就是说,Locks
对于无法以如此干净的方式获取和释放的更复杂的事情可能更有用。老实说,我宁愿首先避免使用裸Locks,而只使用更复杂的并发控制,例如
aCyclicBarrier或 a LinkedBlockingQueue,如果它们满足您的需求。

我从来没有理由使用wait(),或者notify()但可能有一些好的。

2022-07-02