マルチスレッドロック中間進化06

マルチスレッドロック中間進化06

ロック

JDK5.0以降、Javaはより強力なスレッド同期メカニズムを提供します。同期は、同期ロックオブジェクトを明示的に定義することで実現されます。Lockオブジェクトを同期的に使用する

java.util.concurrent.locks.lockインターフェースは、複数のスレッドを制御して共有リソースにアクセスするためのツールです。ロックは、共有リソースへの排他的アクセスを提供します。一度に1つのスレッドのみがLockオブジェクトをロックでき、スレッドは共有リソースへのアクセスを開始します。最初にLockオブジェクトを取得する必要があります

ReentrantLockクラスは、再入可能ロックであるLockを実装します。同期と同じ同時実行性とメモリセマンティクスを備えています。スレッドセーフ制御の実現では、RenntrantLockが一般的に使用され、明示的にロックおよび解放できます。

import java.util.concurrent.locks.ReentrantLock;

public class TestLock {

    public static void main(String[] args) {
        TestLock2 testLock2 = new TestLock2();
        Thread t1 = new Thread(testLock2,"a");
        Thread t2 = new Thread(testLock2,"b");
        t1.start();
        t2.start();
    }

}

class TestLock2 implements Runnable {

    int ticketNum = 10;
    boolean flag =true;

    private ReentrantLock lock = new ReentrantLock();

    @Override
    public void run() {
        while (flag) {
            try {
                lock.lock();
                if (ticketNum > 0) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    System.out.println(ticketNum--);
                } else{
                    flag=false;
                    break;}
            } finally {
                lock.unlock();

            }
        }

    }
}

同期とロックの違い

ロックは明示的なロック(手動で開いたり閉じたり、閉じたり閉じたりすることはできません)、同期は暗黙的なロックですが、自動解放の範囲を除きます

ロックにはコードブロックロックのみがあり、同期にはコードブロックロックとメソッドロックがあります

Lockを使用すると、JVMはスレッドのスケジューリングに費やす時間が短縮され、パフォーマンスとスケーラビリティが向上します。

限定使用シーケンスロック>同期コードブロック>同期方法

おすすめ

転載: blog.csdn.net/rr18758236029/article/details/108580498