Java では、Synchronized ブロックは、関数またはメソッドの特定のリソースで同期を実行するのに役立ちます。コード (LOC) が 100 行あり、同期を 10 行のみ行う必要がある場合は、同期ブロックを使用できます。 Synchronized はキーワード、メソッド、ブロックとして使用できます。このチュートリアルでは、同期ブロックについて詳しく説明します。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
構文:
同期ブロックの構文は次のとおりです。
Synchronized( lo) { //statements that have to be synchronized }
ここで、lo はロック オブジェクトです
同期ブロックは Java でどのように機能しますか?
すでに説明したように、Synchronized ブロックは、関数またはメソッドの特定のリソースで同期を実行するのに役立ちます。スレッドが同期ブロック内で同期されている行を実行する必要がある場合、上記の構文で説明したロック オブジェクト lo のモニターでロックを取得することが必須です。一度に 1 つのスレッドのみがロック オブジェクトのモニターを取得できます。各スレッドは、現在ロックを保持しているスレッドが実行を完了して解放するまで待機する必要があります。
同様に、synchronized キーワードは、一度に 1 つのスレッドだけが同期ブロック内のコード行を実行することを保証します。これにより、複数のスレッドがブロック内で共有されているデータを破損するのを防ぎます。
メソッドが 500 の LOC (コード行) で構成されているが、コードのクリティカル セクション (CS) を保持するコードは 20 行しか存在しないとします。つまり、これらの 20 行によってオブジェクトの状態が変更または変更される可能性があります。したがって、これらの 20 行のコード関数に対して同期を実行して、オブジェクトの状態の変更を回避し、他のスレッドが特定のメソッド内の他の 480 行を中断することなく実行できるようにすることができます。
Java での同期ブロックの例
次に、Java の同期ブロックに関するサンプル プログラムをいくつか見てみましょう。
例 #1
同期ブロックを実装する Java プログラム
コード:
class Testsmple{ void printTestsmple(int n) { //start of synchronized block synchronized(this) { System.out.println("The output of synchronized block is: "); for( int i=1 ; i <p><strong>出力:</strong></p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/172500473898450.png?x-oss-process=image/resize,p_40" class="lazy" alt="Javaの同期ブロック" ></p> <p>このプログラムでは、2 つのスレッド t1 と t2 が使用されており、それぞれに同期メソッドを呼び出す printTestsmple メソッドがあります。 printTestsmple のスレッド 1 の入力は 10、スレッド 2 の入力は 200 です。結果では、最初のスレッドの同期ブロックの出力が 10、20、30、40 であることがわかります。スレッド 2 の同期ブロックの結果は 200、400、600、800 です。さらに、各スレッドの結果の間に「同期ブロックの出力は次のとおりです。」という行が出力されます。</p> <h4 id="例">例 #2</h4> <p>匿名クラスを使用して同期ブロックを実装する Java プログラム。</p> <p><strong>コード:</strong></p> <pre class="brush:php;toolbar:false">class Testsmple{ void printTestsmple(int n) { //start of synchronized block synchronized(this) { System.out.println("The output of synchronized block is: "); for( int i=1 ; i <p><strong>出力:</strong></p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/172500474092308.png?x-oss-process=image/resize,p_40" class="lazy" alt="Javaの同期ブロック" ></p> <p>このプログラムでも、2 つのスレッド t1 と t2 が使用されており、それぞれに同期メソッドを呼び出すメソッド printTestsmple があります。 printTestsmple のスレッド 1 の入力は 10、スレッド 2 の入力は 200 です。結果では、最初のスレッドの同期ブロックの出力が 10、20、30、40 であることがわかります。スレッド 2 の同期ブロックの結果は 200、400、600、800 です。さらに、各スレッドの結果の間に「同期ブロックの出力は次のとおりです。」という行が出力されます。唯一の違いは、このプログラムに匿名クラスが存在することです。</p> <h4 id="例">例 #3</h4> <p>同期ブロックを実装する Java プログラム。</p> <pre class="brush:php;toolbar:false">import java.util.*; class ABC { String nm = ""; public int cnt = 0; public void samplename(String stringexample, List<string>li) { // In order to change the name at a time, only 1 thread is permitted synchronized(this) { nm = stringexample; cnt++; } li.add(stringexample); } } public class SyncBlockExample { //main method public static void main (String[] args) { //create an object for the class ABC ABC obj = new ABC(); //create a list List<string>li = new ArrayList<string>(); //call the method using the object created obj.samplename("Anna Sam", li); System.out.println(obj.nm); } }</string></string></string>
出力:
このプログラムでは、メソッドsamplename内の同期メソッドを使用してクラスABCが作成されます。文字列「Anna Sam」は、samplename メソッドを呼び出すための入力として渡されます。コードを実行すると、文字列「Anna Sam」が出力されます。
メリット
利点の一部を以下に示します:
- 同期の範囲が制限されている場合、パフォーマンスの向上が可能です。
- 小さなコード ブロックを同期して、計算コストを削減します。
- 他のオブジェクトをロックとして柔軟に使用できます。
- Java はマルチスレッド プログラミング言語であるため、共有リソース上で相互排他を実現することが最善です。
以上がJavaの同期ブロックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版
便利なJavaScript開発ツール
