検索

ホームページ  >  に質問  >  本文

java - lock与synchronize的解锁顺序问题?

在学习lock与synchronize的区别时,看到这样一句话:“ lock更灵活,可以自由定义多把锁的枷锁解锁顺序(synchronized要按照先加的后解顺序)”。请问这里:

1.lock的自由定义多把锁的枷锁解锁顺序怎么理解?
2.synchronized要按照先加的后解顺序怎么理解?

谢谢各位!

怪我咯怪我咯2806日前772

全員に返信(2)返信します

  • 高洛峰

    高洛峰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 の番になります。

    返事
    0
  • ringa_lee

    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 のネスト順にすべてロックが解除されます。 🎜

    返事
    0
  • キャンセル返事