ホームページ  >  記事  >  Java  >  Javaのロックとは何ですか

Javaのロックとは何ですか

尚
オリジナル
2019-11-21 10:47:546159ブラウズ

Javaのロックとは何ですか

ロックは、複数のスレッドが共有リソースにアクセスする方法を制御するために使用されます。一般に、ロックにより、複数のスレッドが共有リソースに同時にアクセスすることができなくなります。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。