Javaでの同期関数の共有例
この記事では、Java の同期関数の詳細な説明に関する関連情報を中心に紹介します。この記事が、同期関数の使用方法を理解するのに役立つことを願っています。
同期の詳細な説明。 Java の関数
Java のクラスのメンバー関数が synchronized で変更された場合、それは同じオブジェクトに対応します。複数のスレッドがこのオブジェクトの同期関数を呼び出すときは、前のスレッドが呼び出しを完了するまで待たなければなりません。次のスレッドから呼び出すことができます。
それでは、コードに示されているように、クラスに synchronized によって変更される 2 つのメンバー関数がある場合、2 つのスレッドが実行されているときに、同じオブジェクトに対して、1 つは funcA を呼び出し、もう 1 つは funcB を呼び出すことができますか?
Mysyn はそのようなクラスです。2 つのスレッドがある場合、1 つは run メソッドで最初に funcA を実行し、次に funcB を実行し、もう 1 つのスレッドは run メソッドで最初に funcB を実行し、次に funcA を実行します。開始A...を出力するときに、開始B...を直接出力することは可能ですか?
public class MySyn { public synchronized void funcA(String str){ System.out.println(str+":"); System.out.println("start A..."); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("...A end"); } public synchronized void funcB(String str){ System.out.println(str+":"); System.out.println("start B..."); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("...B end"); } }
テストコードは次のとおりです:
このスレッドは最初に funcA を実行します
public class Mythread implements Runnable { private MySyn mysyn; private String id; public Mythread(MySyn syn, String id){ this.mysyn = syn; this.id = id; } @Override public void run() { this.mysyn.funcA(id); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.mysyn.funcB(id); } public static void main(String arg[]){ MySyn syn=new MySyn(); Thread t1 = new Thread(new Mythread(syn, "t1")); Thread t2 = new Thread(new YourThread(syn, "t2")); t1.start(); t2.start(); } }
このスレッドは最初に funcB を実行します
public class YourThread implements Runnable { private MySyn mysyn; private String id; public YourThread(MySyn syn, String id){ this.mysyn = syn; this.id=id; } @Override public void run() { this.mysyn.funcB(id); this.mysyn.funcA(id); } }
出力結果は主に次のとおりです:そうだね
if Mythread の run メソッドで 2 つの関数呼び出しの間のスリープをキャンセルすると、結果はおそらく次のようになります:t1: start A... ...A end t2: start B... ...B end t2: start A... ...A end t1: start B... ...B end
それでは、funcB が同期関数ではない場合、上記のコードを実行するとどうなるでしょうか?
funcB の synchronized キーワードを削除するためにコードが少し変更されています。実行結果は次のとおりです:
t1: start A... ...A end t1: start B... ...B end t2: start B... ...B end t2: start A... ...A end
同様に、Mysyn クラスにパブリック メンバー変数がある場合、マルチスレッドは、同期関数の呼び出し中に別のスレッドによってメンバー変数を変更することもできます。
上記の実験は、同期されたメンバー関数は、同じオブジェクトの同期された関数呼び出し内の他の同期された関数 (それ自体を含む) に対してのみ排他的な影響を与えることができることを示しています。つまり、マルチスレッド操作では、同じオブジェクトは現時点では次のことしかできません。同期された関数は実行されていますが、他の非同期関数の実行やメンバーへのアクセスは除外されません。
さて、クラスに 2 つの静的同期メソッドがあると仮定します。状況はどうでしょうか?
結果は似ているため、特定の実装については繰り返しません:
マルチスレッドでは、現在、同じクラスで実行できるクラス同期関数 (静的同期関数) は 1 つだけですが、他の非同期静的関数は実行できます。静的メンバーの実行またはアクセスは除外されません
以上がJavaでの同期関数の共有例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。
