在学习lock与synchronize的区别时,看到这样一句话:“ lock更灵活,可以自由定义多把锁的枷锁解锁顺序(synchronized要按照先加的后解顺序)”。请问这里:
1.lock的自由定义多把锁的枷锁解锁顺序怎么理解? 2.synchronized要按照先加的后解顺序怎么理解?
谢谢各位!
走同样的路,发现不同的人生
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 の番になります。
リーリー
Lock は Java セマンティック レベルで実装されており、ロック間に必要な関係はありませんLock的加解锁是在java语义层面上实现的,锁之间没有必然关系
Lock
new lock1 new lock2 lock1.lock(); lock2.lock(); ... lock2.unlock(); lock1.unlock();
synchronized加解锁是由JVM来实现,在执行完synchronized块后自行解锁,所有会按照synchronized リーリー
synchronized
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 の番になります。
リーリー
Lock
は Java セマンティック レベルで実装されており、ロック間に必要な関係はありませんLock
的加解锁是在java语义层面上实现的,锁之间没有必然关系synchronized
加解锁是由JVM来实现,在执行完synchronized
块后自行解锁,所有会按照synchronized
リーリーsynchronized
のロック解除は、synchronized
ブロックの実行後にロックが解除されます。synchronized
のネスト順にすべてロックが解除されます。 🎜