バックエンド エンジニアとして、データを非同期で処理する状況に直面します。 今日は、それが Java でどのように行われるか、そしてそれを行うためのさまざまな方法を見てみましょう。

Thread

Java 並行性の非常に基本的でありながら非常に強力なコンポーネントは、 Thread. Java のスレッドは、実際にはオペレーティング システムのスレッドに関連付けられています。 を作成するための非常に基本的な方法 Thread それを拡張してオーバーライドすることです run :

スレッドを開始すると、 run() 呼ばれること。
あなたは尋ねるかもしれません。 はい、スレッドにはオーバーライド可能な他のメソッドがたくさんあります。

  • ほとんどの場合、スレッドの他のメソッドをオーバーライドしたくありません。
  • 延長したら Thread Java は複数の継承をサポートしていないため、拡張クラスはさらに拡張する能力を失います。
  • スレッドを拡張すると、各スレッドには独自のオブジェクトがあり、大量のオブジェクトがある場合、メモリの健全性には適していません。 Objects of the extended Thread 作成した。

Java は Runnable インターフェースでこれらの問題に対処します。 実際には、 Thread Runnable を取るオーバーロードされたメソッドがあります。

Runnable

Runnable メソッドが 1 つだけのインターフェイスです。 run(). はい、Runnable は機能的なインターフェイスであり、そのインスタンスはラムダ関数で作成できます。 しかし、これは簡単な方法です。 複雑なものについては、それを実装したいと思うかもしれません。 ここで違いを見てください。 それはすべて要件に関するものです:

Runnableには run()、Thread によって制御される (渡される) までは、Thread ではなく単なる Java クラスです。 スレッドの開始により、実行可能なオブジェクトの run() 呼ばれること。

はい、Java はバージョン 1.5 で解決しました。それは Callable です。

Callable<V>

Callable 汎用インターフェースです。 なんで? 戻り値の run this コマンドはジェネリック run this コマンドです。 Callable はあまりにも機能的なインターフェースであり、 call() が唯一のメソッドであり、例外をスローしてジェネリック run this コマンド値を返す引数なしのメソッドです。

Callable の実装は Runnable と非常によく似ています。

here を参照してください。呼び出しはデータを処理し、実行後に収集できる値を返します。 しかし、それを呼び出すことに大きな違いはありますか? を使用しております ExecutorService 呼び出して Future 結果を保持します。 その理由について話しましょう。

ご覧のとおり、スレッド (Runnable または Callable も) を作成および実行する制御された動作はありません。 それぞれが OS のスレッドに関連付けられているため、一度に実行されるスレッドの数を制御したい場合があります。 実行するスレッドの数は、使用可能な CPU コアの数より少なくする必要があります。 まとめて、Java はそれを次のように解決します。 ExecutorService インターフェース。
上記は情報記事です Java での非同期プログラミング: パート I.
上記の手順についてご不明な点がございましたら、コメント セクションからお気軽にお問い合わせください。