ロックは、複数のスレッドが共有リソースにアクセスする方法を制御するために使用されます。一般に、ロックにより、複数のスレッドが共有リソースに同時にアクセスすることができなくなります。
Java のロックには主に次の概念があります:
1. 同期ロック
同時に、同期ロックには 1 つのスレッドのみがアクセスできます。 。オブジェクトに基づいて、synchronized キーワードを通じて同期が実行され、競合するリソースへの相互排他的アクセスが実現されます。
2. 排他的ロック (再入可能ミューテックス ロック)
相互排他的、つまり、同時に 1 つのスレッドによってのみ保持できますが、再入可能、つまり、再入可能です。単一のスレッドによって保持される スレッドは複数回取得されます。それはどういう意味ですか?ロック取得の仕組みにより、「公平なロック」と「不公平なロック」に分けられます。排他的ロックは、デフォルトで不公平なロックとなる ReentrantLock を通じて Java に実装されます。
3. 公平なロック
は、CLH を介して待機しているスレッドの先着順ルールに基づいており、スレッドは公平にロックを取得するためにキューに並びます。ロック。 JavaではReetrantLockにSync型のメンバ変数syncがあり、そのインスタンスがFairSync型の場合、ReetrantLockはフェアロックになります。同期を FairSync タイプに設定するには、just-Lock lock = new ReetrantLock(true) にします。
4. 不公平なロック
スレッドがロックを取得したい場合、CLH 待機キューを無視して直接ロックを取得します。 ReetrantLock のデフォルトは不公平なロック、または - Lock lock = new ReetrantLock(false) です。
5. 共有ロック
複数のスレッドによって同時に取得および共有できるロック。つまり、複数のスレッドがロックを取得し、ロック オブジェクトを処理できます。典型的なものは読み取りロック - ReentrantReadWriteLock.ReadLock です。つまり、複数のスレッドがそれを読み取ることができ、他のスレッドによるそれの読み取りには影響しませんが、誰もそれを変更することはできません。 CyclicBarrier、CountDownLatch、Semaphore も共有ロックです。
6. 読み取り/書き込みロック
は、関連するロックのペアを維持します。「読み取りロック」は読み取り専用操作に使用されます。これは「共有ロック」であり、次の方法で取得できます。複数のスレッドを同時に実行します。 「書き込みロック」は書き込み操作に使用され、1つのスレッドロックでのみ取得できる「排他ロック」です。
Java では、読み取り/書き込みロックは ReadWriteLock インターフェイスによって定義され、その実装クラスは、内部クラス ReadLock および WriteLock を含む ReentrantReadWriteLock です。 readLock() メソッドと writeLock() メソッドは、それぞれ操作のロックと書き込み操作のロックを返します。
Java の知識をさらに深めたい場合は、Java の基本チュートリアル を参照してください。
以上がJavaのロックとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。