在学习lock与synchronize的区别时,看到这样一句话:“ lock更灵活,可以自由定义多把锁的枷锁解锁顺序(synchronized要按照先加的后解顺序)”。请问这里:
1.lock的自由定义多把锁的枷锁解锁顺序怎么理解?
2.synchronized要按照先加的后解顺序怎么理解?
谢谢各位!
高洛峰2017-04-18 10:51:35
Lock はインターフェースであり、最も一般的に使用される実装は ReentrantLock です。その柔軟性の 1 つは、公平なパラメーターを設定できることです。
synchronized および Fair=false を指定した ReentrantLock では、ロック順序を決定できません。つまり、スレッド A、B、C はすべて、最初に A、次に B、最後に C でオブジェクトをロックしようとします。その後、A がオブジェクトのロックを解除するときに、B と C のどちらがロックするかを決定できません。次にオブジェクト。
Fair=true で ReentrantLock を使用する場合、状況が決まります。A がオブジェクトのロックを解除すると、B が C の前にオブジェクトをロックしようとするため、B は次にオブジェクトをロックする必要があり、B がロックを解除した場合にのみ C の番になります。
ringa_lee2017-04-18 10:51:35
リーリー
Lock
は Java セマンティック レベルで実装されており、ロック間に必要な関係はありませんLock
的加解锁是在java语义层面上实现的,锁之间没有必然关系
new lock1
new lock2
lock1.lock();
lock2.lock();
...
lock2.unlock();
lock1.unlock();
synchronized
加解锁是由JVM来实现,在执行完synchronized
块后自行解锁,所有会按照synchronized
リーリー
synchronized
のロック解除は、synchronized
ブロックの実行後にロックが解除されます。synchronized
のネスト順にすべてロックが解除されます。 🎜