ホームページ Java &#&チュートリアル synchronized で使用される 4 つの方法の紹介

synchronized で使用される 4 つの方法の紹介

Oct 08, 2018 pm 03:16 PM
synchronized

この記事では、同期を使用する 4 つの方法を紹介します。必要な方は参考にしてください。

1. メソッドの変更
synchronized メソッドの変更は非常に簡単です。つまり、メソッドの前に synchronized を追加します。例:

public synchronized void method()
{
   // todo
}
ログイン後にコピー

はできません。インターフェイス メソッドを定義するときに使用します。 synchronized キーワードを使用します。
コンストラクターは synchronized キーワードを使用できませんが、同期に synchronized コード ブロックを使用できます。
synchronized キーワードは継承できません。同期したい場合は、キーワードを明示的に追加する必要があります。
synchronized キーワードによって変更されたメソッドは、オーバーライドされた場合、デフォルトでは同期されません。同期したい場合は、キーワードを明示的に追加するか、スーパー親クラスのメソッドが同期に相当します。

2. コード ブロックを変更します。

public  void method()
{
   synchronized(this)
   synchronized(XX.class)
}
ログイン後にコピー

synchronized(this) は、現在複数のオブジェクトがある場合、これのコピーが複数存在します。同じオブジェクトのみをロックできます。
synchronized(XX.class) このロックは、このタイプのクラスである限り便利です。

2 つの同時スレッドが同じオブジェクト オブジェクト内の synchronized(this) 同期コード ブロックにアクセスする場合、1 つのスレッドが一度に実行できるスレッドは 1 つだけです。別のスレッドは、このコード ブロックを実行する前に、現在のスレッドがこのコード ブロックの実行を完了するまで待つ必要があります。スレッドがオブジェクトの synchronized (this) 同期コード ブロックにアクセスするとき、別のスレッドは引き続きオブジェクト内の非 synchronized (this) 同期コード ブロックにアクセスできます。特に重要なのは、スレッドがオブジェクトの synchronized(this) 同期コード ブロックにアクセスすると、オブジェクト内の他のすべての synchronized(this) 同期コード ブロックへの他のスレッドのアクセスがブロックされることです。
3 番目の例は、他の同期されたコード ブロックにも当てはまります。つまり、スレッドがオブジェクトの synchronized (this) 同期コード ブロックにアクセスすると、このオブジェクトのオブジェクト ロックを取得します。その結果、オブジェクト オブジェクトのすべての同期されたコード部分への他のスレッドのアクセスが一時的にブロックされます。
上記のルールは他のオブジェクト ロックにも当てはまります。

3. 静的メソッドを変更する
静的メソッドはオブジェクトではなくクラスに属することがわかっています。同様に、synchronized によって変更された静的メソッドは、このクラスのすべてのオブジェクトをロックします。これを使用すると、すべてのクラスがロック効果を持ちます。

public synchronized static void method() {
   // todo
   }
ログイン後にコピー

4 クラスの変更#その動作。スコープは同期後の括弧で囲まれた部分で、影響を受けるオブジェクトはこのクラスのオブジェクトであればどれだけオブジェクトがあっても動作します。次のコード

class ClassName {
    public void method() {
       synchronized(ClassName.class) {
                 // todo       
                 }
    }
 }
ログイン後にコピー
summary:

A. synchronizedキーワードがメソッドに追加されるかオブジェクトに追加されるかに関係なく、そのキーワードが作用するオブジェクトが非静的である場合、ロックが取得されます。オブジェクトです。同期されている場合は、オブジェクトが静的メソッドまたはクラスの場合、取得するロックはそのクラスのすべてのオブジェクトに対して同じロックです。

B. 各オブジェクトに関連付けられたロックは 1 つだけです。このロックを取得した人は、そのオブジェクトが制御するコードを実行できます。
C. 同期を実現するには多くのシステム オーバーヘッドが必要であり、デッドロックが発生する可能性もあるため、不必要な同期制御は避けるようにしてください。
D. 同期キーワードはオブジェクトをロックします。

以上がsynchronized で使用される 4 つの方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java での Synchronized の原理と使用シナリオ、および Callable インターフェイスの使用法と差異分析 Java での Synchronized の原理と使用シナリオ、および Callable インターフェイスの使用法と差異分析 Apr 21, 2023 am 08:04 AM

1. 基本機能 1. 楽観的ロックで開始し、ロック競合が多発する場合は悲観的ロックに変換する 2. 軽量なロック実装で開始し、長時間ロックを保持するとロックを解除する3. 軽量ロックを実装するときに最もよく使用されるスピン ロック戦略 4. 不公平なロックである 5. リエントラント ロックである 6. 読み取り/書き込みロックではない 2. JVMロック プロセスを同期します。 ロックは、ロックなし、バイアスされたロック、軽量ロック、および重量ロックの状態に分類されます。状況に応じて順次バージョンアップしていきます。偏ったロックは男主人公を鍵、女主人公をスレとするもので、このスレッドだけがこのロックを使用すれば、たとえ結婚証明書を取得しなくても男主人公と女主人公は永遠に幸せに暮らせる(高額回避) -コストオペレーション)しかし、女性のサポート役が登場します

Javaキーワード同期原理とロック状態の分析例 Javaキーワード同期原理とロック状態の分析例 May 11, 2023 pm 03:25 PM

1. Java におけるロックの概念 Spin ロック: スレッドがロックを取得するとき、そのロックが別のスレッドによって取得されている場合、スレッドはループで待機し、ロックが正常に取得できるかどうかを判断し続けます。ロックが取得されると、ロックはループを終了します。楽観的ロック: 競合がないことを前提として、データを変更する際に以前に取得したデータと不整合が見つかった場合、最新のデータを読み込み、変更を再試行します。悲観的ロック: 同時実行性の競合が発生することを想定し、すべてのデータ関連操作を同期し、データが読み取られた時点からロックを開始します。排他的ロック (書き込み): リソースに書き込みロックを追加します。スレッドはリソースを変更できますが、他のスレッドはリソースを再度ロックすることはできません (単一書き込み)。共有ロック (読み取り): リソースに読み取りロックを追加した後、読み取りのみ可能ですが変更はできません。他のスレッドは読み取りロックのみを追加でき、書き込みロック (複数) を追加できません。 S として参照

synchronized を使用して Java で同期メカニズムを実装するにはどうすればよいですか? synchronized を使用して Java で同期メカニズムを実装するにはどうすればよいですか? Apr 22, 2023 pm 02:46 PM

Java 1 での synchronized の使い方のまとめ。関数修飾子として synchronized を使用した場合のサンプルコードは次のようになります: Publicsynchronizedvoidmethod(){//….} これが同期メソッドですが、このときどのオブジェクトが同期ロックされているのでしょうか?彼がロックするのは、この同期されたメソッド オブジェクトを呼び出すことです。言い換えれば、オブジェクト P1 がこの同期メソッドを異なるスレッドで実行すると、同期効果を達成するために相互排他が形成されます。ただし、このオブジェクトが属するクラスが生成する別のオブジェクトP2は、synchronizedキーワードを付加してこのメ​​ソッドを任意に呼び出すことができる。上記のサンプルコードなど。

Java の 3 つの同期方法とその使用方法は何ですか? Java の 3 つの同期方法とその使用方法は何ですか? Apr 27, 2023 am 09:34 AM

1. 同期は最も一般的に使用される同期方法であり、これには主に 3 つの使用方法があることを説明します。 2. 例//一般的なクラス メソッドの同期 synchronizedpublidvoidinvoke(){}//クラスの静的メソッドの同期 synchronizedpublicstaticvoidinvoke(){}//コード ブロックの同期 synchronized(object){}これら 3 つのメソッドの違いは、同期されるオブジェクトが異なることです。通常のクラスはオブジェクト自体を同期し、静的メソッドはクラス自体を同期し、コード ブロックは括弧内のオブジェクトを同期します。 Javaにはどのようなコレクションがありますか?

Java 同期ロックのアップグレードの原理とプロセスは何ですか? Java 同期ロックのアップグレードの原理とプロセスは何ですか? Apr 19, 2023 pm 10:22 PM

ツールの準備 同期の原理について正式に説明する前に、まずスピン ロックについて話しましょう。スピン ロックは同期の最適化に大きな役割を果たすためです。スピン ロックを理解するには、まずアトミック性とは何かを理解する必要があります。いわゆるアトミック性とは、単に各操作が行われないか完了することを意味します。すべてを行うということは、操作中に中断できないことを意味します。たとえば、変数データに 1 を追加するには、次の 3 つのステップがあります: メモリからレジスタにロードする。データの値に 1 を加算します。結果をメモリに書き込みます。原子性とは、スレッドがインクリメント操作を実行しているときに、他のスレッドによって中断できないことを意味し、このスレッドがこれら 3 つのプロセスを完了した場合にのみ実行されます。

Java では、synchronized キーワードを使用するだけでなく、Lock を提供する必要があるのはなぜですか? Java では、synchronized キーワードを使用するだけでなく、Lock を提供する必要があるのはなぜですか? Apr 20, 2023 pm 05:01 PM

概要: synchronized キーワードは、1 つのスレッドのみが同期されたコード ブロックにアクセスできるようにするために Java で提供されています。 synchronized キーワードが提供されているのに、なぜ Lock インターフェースも Java SDK パッケージで提供されるのですか?これは不必要な車輪の再発明でしょうか?今日はこの問題について一緒に話し合います。 Java では synchronized キーワードが提供され、1 つのスレッドのみが同期されたコード ブロックにアクセスできるようにします。 synchronized キーワードが提供されているのに、なぜ Lock インターフェースも Java SDK パッケージで提供されるのですか?これは不必要な車輪の再発明でしょうか?今日は一緒にそれについて話し合いましょう

Java同期とは Java同期とは May 14, 2023 am 08:28 AM

Synchronized とは何ですか? Java 読者は synchronized キーワードに馴染みがありません。これはさまざまなミドルウェア ソース コードや JDK ソース コードで見ることができます。synchronized に詳しくない読者にとっては、synchronized キーワードは複数の言語で使用する必要があることだけを知っています。 -threading.synchronized によりスレッドの安全性を確保できます。これは、ミューテックス ロック (同時に 1 つのスレッドだけが実行でき、他のスレッドは待機します)、または悲観的ロック (同時に 1 つのスレッドだけが実行でき、他のスレッドは待機します) と呼ばれます。JVM 仮想マシンは、開発者は synchronized キーワードを使用するだけで済みます。使用する場合は、ロックのミューテックスとしてオブジェクトを使用する必要があります

Java にはアクセス以外の修飾子がいくつありますか? Java にはアクセス以外の修飾子がいくつありますか? Aug 30, 2023 pm 06:01 PM

Java には、可視性を超えた機能を提供する他の修飾子がいくつか用意されています。これらの修飾子は非アクセス修飾子と呼ばれ、静的として宣言された静的メンバーはクラスのすべてのインスタンスに共通です。静的メンバーは、クラス メモリに格納されるクラス レベルのメンバーです。 Final この修飾子は、変数、メソッド、またはクラスへのさらなる変更を制限するために使用されます。 Final として宣言された変数の値は、その値を取得した後は変更できません。 Final メソッドをサブクラスでオーバーライドしたり、Final クラスのサブクラスを作成したりすることはできません。 Abstract この修飾子はクラスまたはメソッドで使用できます。この修飾子を変数やコンストラクターに適用することはできません。抽象として宣言されたメソッドはサブクラスで変更する必要があります。抽象宣言されたクラスをインスタンス化することはできません。同期 この修飾子は、複数のスレッドを制御するために使用されます。

See all articles