雪の吹きだまりがダイヤモンドのように輝き、星がおとぎ話をささやく遠く離れた雪の王国で、サンタは一年で最も魔法の夜に向けて準備をしていました。彼の工場は巨大な楽器のようにうなり声を上げ、エルフたちは箱を持って走り回り、おもちゃは色とりどりに輝き、新しい既製の贈り物ごとに鐘が鳴り響きました。
しかし、魔法は脅威にさらされていました。
「おもちゃが多すぎる!餌がいっぱいだ!」 — エルフのチーフプロデューサーは不満を漏らした。
「荷物をまとめる時間がない!」 - 梱包するエルフも彼の言葉に同調しました。
サンタさんはこう考えました。「どうすればエルフたちを助けることができるでしょうか?彼らは一生懸命頑張っていますが、魔法なしではやっていけないのです。」
最初の魔法: シンクロナイゼーション
サンタは同期として知られる呪文に目を向けました。エルフたちが共通のテープを扱うときに衝突したり混乱したりしないように、保護バリアを作成しました。
「おもちゃを置いたり拾ったりできるのは、一度に 1 人だけです。」とサンタさんが説明しました。
これは次のようになります:
class SantaFactory { private final Queue<string> conveyorBelt = new LinkedList(); private final int MAX_CAPACITY = 10; public void produce(String toy) throws InterruptedException { synchronized (conveyorBelt) { while (conveyorBelt.size() == MAX_CAPACITY) { System.out.println("Производитель ждёт: лента заполнена!"); conveyorBelt.wait(); // Производитель ждёт, пока появится место } conveyorBelt.add(toy); System.out.println("Игрушка произведена: " + toy); conveyorBelt.notifyAll(); // Уведомляем упаковщиков о новой игрушке } } public void consume() throws InterruptedException { synchronized (conveyorBelt) { while (conveyorBelt.isEmpty()) { System.out.println("Потребитель ждёт: игрушек нет!"); conveyorBelt.wait(); // Упаковщик ждёт, пока появится игрушка } String toy = conveyorBelt.poll(); System.out.println("Игрушка упакована: " + toy); conveyorBelt.notifyAll(); // Уведомляем производителей о свободном месте } } } </string>
wait と NoticeAll の魔法のプロパティ:
wait(): 条件 (空のテープなど) が false になるまでスレッドをスリープします。
NoticeAll(): 待機中のすべてのスレッドを起動して、続行できるかどうかを確認します。
2 番目のマジック: BlockingQueue
サンタさんは、エルフたちがよくnotifyAllを呼び出すのを忘れており、それが遅延を引き起こしていることに気づきました。次に、彼は魔法のツール BlockingQueue を使用しました。BlockingQueue 自体がスレッドを処理します。
BlockingQueue は次のことを行います:
テープがいっぱいの場合、メーカーは自動的に待機します。
テープが空の場合は、梱包者自身が待つ必要があることを理解しています。
class SantaFactory { private final Queue<string> conveyorBelt = new LinkedList(); private final int MAX_CAPACITY = 10; public void produce(String toy) throws InterruptedException { synchronized (conveyorBelt) { while (conveyorBelt.size() == MAX_CAPACITY) { System.out.println("Производитель ждёт: лента заполнена!"); conveyorBelt.wait(); // Производитель ждёт, пока появится место } conveyorBelt.add(toy); System.out.println("Игрушка произведена: " + toy); conveyorBelt.notifyAll(); // Уведомляем упаковщиков о новой игрушке } } public void consume() throws InterruptedException { synchronized (conveyorBelt) { while (conveyorBelt.isEmpty()) { System.out.println("Потребитель ждёт: игрушек нет!"); conveyorBelt.wait(); // Упаковщик ждёт, пока появится игрушка } String toy = conveyorBelt.poll(); System.out.println("Игрушка упакована: " + toy); conveyorBelt.notifyAll(); // Уведомляем производителей о свободном месте } } } </string>
第三の魔法: エグゼキュータとスレッド プール
エルフたちが疲れないようにするために、サンタは魔法の道具、糸のプールを作りました。これで、各エルフは自分のタスクを実行し、その数は自動的に調整されました。
「もうエルフたちはお互いを追いかけることはなくなり、すべてが順調に進んでいます。」サンタは喜びました。
コード例:
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; class SantaFactoryBlocking { private final BlockingQueue<string> conveyorBelt = new ArrayBlockingQueue(10); public void produce(String toy) throws InterruptedException { conveyorBelt.put(toy); // Если лента заполнена, поток автоматически ждёт System.out.println("Игрушка произведена: " + toy); } public void consume() throws InterruptedException { String toy = conveyorBelt.take(); // Если лента пуста, поток автоматически ждёт System.out.println("Игрушка упакована: " + toy); } } </string>
エグゼキューターの魔法の特性:
newFixedThreadPool(n): 再利用される n 個のスレッドのプールを作成します。
submit(task): スレッドの 1 つでタスクを開始します。
shutdown(): すべてのタスクが完了した後に実行を停止します。
第四の魔法: CompletableFuture
最後の段階で、サンタは少し魔法を加えました。エルフが非同期で動作するようになり、プロセスが高速化されました。
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SantaRaceWithExecutors { public static void main(String[] args) { SantaFactoryBlocking factory = new SantaFactoryBlocking(); ExecutorService executor = Executors.newFixedThreadPool(4); // 4 эльфа // Запускаем 2 производителя for (int i = 1; i { try { for (int j = 1; j { try { for (int j = 1; j <h2> CompletableFuture の魔法のプロパティ: </h2> <p>非同期: タスクはメインスレッドをブロックせずにバックグラウンドスレッドで実行されます。<br> 使いやすさ: スレッドを手動で管理する必要はありません。</p> <h2> 新年が救われました! </h2> <p>最後のおもちゃが梱包されると、サンタさんは喜びのため息をつきました。 「エルフの皆さん、素晴らしい仕事をしてくれました。マルチスレッドの魔法のおかげで、私たちは速くなっただけでなく、より幸せになりました!」</p> <p>そして現在、大晦日の夜、サンタはアシスタントたちに、マルチスレッドがどのように休日を救ったのかについてのおとぎ話を話します。</p> <p>✨ 明けましておめでとうございます、皆さん! ?</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173595268346848.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Праздничные гонки Санты: Волшебство многопоточности Java"></p>
以上がサンタのホリデー レース: Java マルチスレッドの魔法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

クラスローダーは、統一されたクラスファイル形式、動的読み込み、親代表団モデル、プラットフォーム非依存バイトコードを通じて、さまざまなプラットフォーム上のJavaプログラムの一貫性と互換性を保証し、プラットフォームの独立性を実現します。

Javaコンパイラによって生成されたコードはプラットフォームに依存しませんが、最終的に実行されるコードはプラットフォーム固有です。 1。Javaソースコードは、プラットフォームに依存しないバイトコードにコンパイルされます。 2。JVMは、特定のプラットフォームのバイトコードをマシンコードに変換し、クロスプラットフォーム操作を保証しますが、パフォーマンスは異なる場合があります。

マルチスレッドは、プログラムの応答性とリソースの利用を改善し、複雑な同時タスクを処理できるため、最新のプログラミングで重要です。 JVMは、スレッドマッピング、スケジューリングメカニズム、同期ロックメカニズムを介して、異なるオペレーティングシステム上のマルチスレッドの一貫性と効率を保証します。

Javaのプラットフォームの独立性とは、書かれたコードがJVMが変更なしでインストールされた任意のプラットフォームで実行できることを意味します。 1)JavaソースコードはBytecodeにコンパイルされ、2)BytecodeはJVMによって解釈および実行されます、3)JVMは、プログラムが異なるオペレーティングシステムで実行されることを確認するために、メモリ管理とガベージコレクション機能を提供します。

JavaApplicationScanIndEDENCOUNTIONPLATFORM-SPECISTESUESUSESEJVM'SABSTRACTION.REASONSINCLUDE:1)NativeCodeandLibraries、2)OperatingSystemDifferences、3)JVMimplementationVariations、および4)HardweardePencies.TomiteTETETETESES、DEVELAPERSHOULD:1)

クラウドコンピューティングにより、Javaのプラットフォームの独立性が大幅に向上します。 1)JavaコードはBytecodeにコンパイルされ、異なるオペレーティングシステムでJVMによって実行され、クロスプラットフォーム操作が確保されます。 2)DockerとKubernetesを使用してJavaアプリケーションを展開して、携帯性とスケーラビリティを向上させます。

java'splatformendenceallowsdevelopersowritecodeodeonceanceandonitondeviceoros withajvm.

Dockerなどのコンテナ化技術は、Javaのプラットフォームの独立性を置き換えるのではなく、強化します。 1)環境全体の一貫性を確保し、2)特定のJVMバージョンを含む依存関係を管理する、3)展開プロセスを簡素化して、Javaアプリケーションをより順応性と管理しやすくする。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

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

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

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