検索

Javaの同期ブロック

Aug 30, 2024 pm 03:58 PM
java

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>

出力:

Javaの同期ブロック

このプログラムでは、メソッドsamplename内の同期メソッドを使用してクラスABCが作成されます。文字列「Anna Sam」は、samplename メソッドを呼び出すための入力として渡されます。コードを実行すると、文字列「Anna Sam」が出力されます。

メリット

利点の一部を以下に示します:

  • 同期の範囲が制限されている場合、パフォーマンスの向上が可能です。
  • 小さなコード ブロックを同期して、計算コストを削減します。
  • 他のオブジェクトをロックとして柔軟に使用できます。
  • Java はマルチスレッド プログラミング言語であるため、共有リソース上で相互排他を実現することが最善です。

以上がJavaの同期ブロックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

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

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

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

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

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

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

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

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

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

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

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

PhpStorm Mac バージョン

PhpStorm Mac バージョン

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

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール