Java 仮想マシンはどのようにしてスレッド同期を実行しますか?

Java 仮想マシンはどのようにしてスレッド同期を実行しますか?

同期の原理を紹介したいのですが、どこから始めればよいかわかりません。インターネットで外国人が書いた記事を見ましたが、スレッド同期に関する基礎知識がいくつか紹介されていました。なので、皆さんに見てもらえるように翻訳したいです。これらの基礎知識を読んでおくと、後で書く同期の原理がより理解しやすくなると思います。

Java 言語を知っている人なら誰でも、Java コードを JVM で実行するには、バイトコードで構成されるクラス ファイルに変換する必要があることを知っています。この記事では主に、Java 仮想マシンがバイトコード レベルでスレッド同期を実行する方法を分析します。

スレッドと共有データ

Java プログラミング言語の強みの 1 つは、言語レベルでのマルチスレッドのサポートです。このサポートの多くは、複数のスレッドによる共有データへのアクセスの調整に重点を置いています。 JVM のメモリ構造には、主にスタック、ヒープ、メソッド領域などの重要な領域が含まれます。

Java 仮想マシンでは、各スレッドに独自のスタック メモリがあり、その中には、スレッドによって呼び出される各メソッドのローカル変数、パラメーター、戻り値が含まれます。他のスレッドはこのスタック メモリ ブロック内のデータを読み取ることができません。スタック上のデータは、プリミティブ型とオブジェクト参照に制限されます。したがって、JVM では、スタックは実際のオブジェクトを保存できず、オブジェクトへの参照のみを保存します。実際のオブジェクトはヒープに格納されます。

JVM では、ヒープ メモリはすべてのスレッドによって共有されます。ヒープにはオブジェクトのみが含まれ、それ以外は何も含まれません。したがって、基本型とオブジェクト参照はヒープ上に保存できません。ヒープとスタックには明確な役割分担があります。ただし、オブジェクトへの参照は、実際にはオブジェクトの一部です。ここで言及する価値があるのは、配列はヒープ上に格納され、基本的なタイプのデータもヒープ上に格納されるということです。 Java では配列はオブジェクトだからです。

スタックとヒープに加えて、クラスの静的変数など、一部のデータは JVM のメソッド領域に格納されることがあります。メソッド領域はスタックに似ており、基本型とオブジェクト アプリケーションのみが含まれます。スタックとは異なり、メソッド領域内の静的変数はすべてのスレッドからアクセスできます。

オブジェクトとクラスのロック

前述したように、JVM にはすべてのスレッドで共有できる 2 つのメモリ領域があります。

  • すべてのオブジェクトが格納されるヒープ
  • 静的変数が格納されるメソッド領域

したがって、複数のスレッドが同じオブジェクトまたは静的変数に同時にアクセスする場合は、それらを制御する必要があります。そうしないと、予期しない結果が発生する可能性があります。

複数のスレッド間で共有データへのアクセスを調整するために、仮想マシンは各オブジェクトとクラスにロックを割り当てます。このロックは特権のようなもので、同時にこのクラスまたはオブジェクトを「所有」できるのは 1 つのスレッドだけです。スレッドがクラスまたはオブジェクトのロックを取得したい場合は、仮想マシンに問い合わせる必要があります。スレッドが仮想マシンにクラスまたはオブジェクトのロックを求めると、仮想マシンはスレッドにロックをすばやく割り当てることもあれば、ゆっくり割り当てることもあり、スレッドがロックを取得できないこともあります。スレッドがロックを必要としなくなったら、ロックを仮想マシンに返します。この時点で、仮想マシンはロックを申請する他のスレッドにロックを割り当てることができます。

クラス ロックは実際にはオブジェクト ロックを通じて実装されます。仮想マシンがクラスをロードすると、このクラスの java.lang.Class オブジェクトがインスタンス化されるためです。クラスをロックすると、実際には対応する Class オブジェクトがロックされます。

モニター

モニターとロックは JVM によって同時に使用されます (著者は、ロックが実際にはモニターを通じて実装されることを意味していると理解しています)。モニターの主な機能は、コードのセクションを監視し、同時に 1 つのスレッドのみが実行されるようにすることです。

各モニターはオブジェクトに関連付けられています。スレッドがモニターによって監視されているコード ブロック内の最初の命令を実行する場合、スレッドは参照されるオブジェクトのロックを取得する必要があります。スレッドがロックを取得するまで、このコードを実行することはできません。ロックが取得されると、スレッドは「保護された」コードに入り、実行を開始できます。

スレッドがコード ブロックを離れると、その方法に関係なく、関連付けられたオブジェクトのロックが解除されます。

複数のロック

同じスレッドが同じオブジェクトを複数回ロックできます。各オブジェクトは、ロックされた回数を記録するカウンターを保持します。ロック解除されたオブジェクトのカウンターは 0 です。スレッドがロックを取得すると、カウンターは 1 に増加します。同じスレッドがオブジェクトのロックを再度取得すると、カウンターは再度増加します。同じスレッドがロックを解除すると、カウンターは再び減少します。カウンターが 0 の場合、ロックは解放され、他のスレッドがロックを取得できるようになります。

同期

Java では、複数のスレッドが同じ共有データにアクセスする必要がある場合、同期と呼ばれる調整方法があります。 Java 言語には、データへのスレッド アクセスを同期するための 2 つの組み込みの方法 (同期コード ブロックと同期メソッド) が用意されています。

この記事では、同期コード ブロックと同期メソッド、および実装方法についての簡単な紹介も行います。彼の紹介はあまりにも単純すぎると思うので、ここでは翻訳しません。詳しい記事は後ほど書きます。

元のアドレス: Java仮想マシンがスレッド同期を実行する方法

[この記事は、51CTOコラムニストのホリス、著者WeChatパブリックアカウントホリス(ID:hollischuang)によるオリジナル記事です]

この著者の他の記事を読むにはここをクリックしてください

<<:  クラウドシステムの管理はITプロフェッショナルにとって大きな課題です

>>:  Sina Weibo の Nanwei Hu: Weibo 情報ストリーム推奨におけるディープラーニングの実践

推薦する

Weiphone フォーラムがクラッシュしたのはなぜですか? 国家ラジオ・映画・テレビ総局による禁止令により、新しいドメイン名が正式に開始された。

今日、「微音フォーラムがダウンしている」というニュースが注目を集めています。微音フォーラムは公式に発...

大きな進歩、世界的なクラウドコンピューティングベンダーがブロックチェーンの開発に協力

中国工業情報化部が最近発表した「2018年中国ブロックチェーン産業白書」によると、2018年3月末現...

U-Mail はどのようにして電子メール マーケティングを自動化するのでしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています多くの企業...

統計に基づいて高品質のウェブサイトコンテンツを書く方法

ウェブサイトの構造が人間の骨格のようなものだとしたら、ウェブサイトのコンテンツは人間の魂のようなもの...

interserver 0.2 USD 初月 752M メモリ Windows VPS

Interserver.net は、1999 年以来 IDC 業界で豊富な経験を持っていると主張して...

百度緑大根アルゴリズムアップデート:低品質のソフトテキストサイトは罰せられる

Baidu の Green Radish アルゴリズムが最近更新され、多くのウェブサイト所有者に影響...

WeChatの運営に関するあまり知られていない興味深い事実、WeChatの宣伝と運営方法

上記のクールで少しよそよそしいフォーマットはどうやって作成したのですか?公式アカウントの品質向上に役...

Red Hat、オープンハイブリッドクラウドの新時代を計画

[51CTO.com よりオリジナル記事] 現在、あらゆる面で条件が徐々に成熟するにつれて、オープン...

分散キャッシュがレジストリをクラッシュさせた様子をご覧ください

失敗に関する話題を書く機会があるときは、書き始める前に長い間静かにモニターを見つめます。多大な苦悩と...

2018 年に人気のあったオープンソース プロジェクトをご存知ですか?

オープンソース プロジェクトは最先端のイノベーションを推進し、加速させています。どれが一番重要だと思...

hostodo: 全品 40% オフ、年間 $11.99、512M メモリ/1 コア/8g NVMe/3T トラフィック、DA パネル ライセンス無料

現在から 1 月 1 日まで、hostodo はすべての NVMe シリーズ VPS を 40% 割...

オウルクラウド:500Gbpsの高防御VPS、月額14元から、150Mbpsの帯域幅、無制限のトラフィック、Windowsをサポート

Oulu Cloudは、2017年1月に深センと香港の5人のメンバーによって設立された新会社です。主...

ウェブサイトの外部リンク公開とターゲットプロモーション

多くの初心者ウェブマスターが外部リンク獲得に苦労していると思います。A5 Webmaster Net...

「無名」と疑問視されるVipshopが、なぜ多くのeコマース企業に模倣されるのか?

最近、米国の資本市場はこの中国株を攻撃し始めている。金融ブログSeekingAlphaによると、投資...

日々のウェブサイトメンテナンスのポイントについて簡単に説明します

ほとんどのウェブマスターは、日々の業務で何をすべきかを知っていると思いますが、日々のウェブサイトのメ...