ホームページ  >  記事  >  Java  >  Javaの同時実行性とは何ですか?

Javaの同時実行性とは何ですか?

青灯夜游
青灯夜游オリジナル
2019-11-15 17:28:102847ブラウズ

Javaの同時実行性とは何ですか?

#同時実行性と並列処理

##同時実行性:

は、一定期間内の複数の処理を指します。タスクは交互に実行されます。複数のスレッドが動作している場合、CPU の実行時間をいくつかの時間帯に分割し、各時間帯を各スレッドに割り当てて実行します。 1 つのスレッドのコードが実行されている間、他のスレッドは一時停止されます。

並列:

は、複数のタスクを同時に処理できる機能を指します。複数のスレッドが動作している場合、CPU はこれらのスレッドからのリクエストを同時に処理できます。 したがって、並行環境ではプログラムのクロージャが壊れ、次のような特徴が現れます:

1. 並行プログラム間には相互制限関係があります。直接的な制約は、別のプログラムの計算結果を必要とする 1 つのプログラムに反映され、間接的な制約は、プロセッサやバッファなどの共有リソースをめぐって競合する複数のプログラムに反映されます。

2. 同時実行プログラムの実行プロセスは断続的です。プログラムは現場での指示と実行ポイントを記憶する必要があります。

3. 同時実行数が適切に設定され、CPU に十分な処理能力がある場合、同時実行によりプログラムの実行効率が向上します。

同時環境では、オブジェクトに複数のスレッドがアクセスできる場合、アクセスされたスレッドによってオブジェクトが変更され、データの不整合が発生します。そこで、スレッドセーフの概念が提案されています。

#スレッドの基本概念の紹介

スレッドとプロセス

プロセス: すべてのプロセス独立したコードとデータ空間 (プロセス コンテキスト) があり、プロセス間の切り替えには大きなオーバーヘッドが発生し、プロセスには 1 ~ n 個のスレッドが含まれます。 (プロセスはリソース割り当ての最小単位です)。簡単に言えば、プロセスは互いに分離され、ある程度独立して実行されるプログラムです。

スレッド: 同じタイプのスレッドはコードとデータ空間を共有し、各スレッドには独立した実行スタックとプログラム カウンター (PC) があり、スレッド切り替えのオーバーヘッドは小さくなります。 (スレッドは CPU スケジューリングの最小単位です)

スレッドはプロセスと同様に、作成、準備完了、実行中、ブロック、終了の 5 つの段階に分かれています。

#1. 作成: 新しいスレッド オブジェクトが作成されますが、start() メソッドはまだ呼び出されません。例: Thread thread = new Thread();Javaの同時実行性とは何ですか?

2. 準備完了: スレッド オブジェクトが作成された後、他のスレッド (メイン スレッドなど) がオブジェクトの start() メソッドを呼び出します。この状態のスレッドは実行可能なスレッド プール内にあり、CPU を使用する権利を取得するためにスレッド スケジューリングによって選択されるのを待っています。

3. 実行: 実行状態 (実行可能) のスレッドは、CPU タイム スライス (タイムスライス) を取得し、プログラム コードを実行します。

4. ブロック済み: スレッドはブロックされています。「ブロック状態」と「待機状態」の違いは次のとおりです: 「ブロック状態」は排他ロックの取得を待機しています。このイベントは別のイベントで発生します。スレッドがロックを放棄すると、「待機状態」が一定時間待機するか、ウェイクアップ アクションが発生します。プログラムが同期領域 (同期) に入るのを待っている間、スレッドはこの状態に入ります。

(1). ブロッキングを待機中: 実行中のスレッドは o.wait() メソッドを実行し、JVM はスレッドを待機キューに入れます。

(2). 同期ブロッキング: 実行中のスレッドがオブジェクトの同期ロックを取得するときに、その同期ロックが別のスレッドによって占有されている場合、JVM はそのスレッドをロック プールに入れます。

(3). その他のブロック: 実行中のスレッドが Thread.sleep(long ms) または t.join() メソッドを実行するか、I/O リクエストを発行すると、JVM はスレッドを次のように設定します。ブロッキング状態。 sleep() 状態がタイムアウトになるか、join() がスレッドの終了を待つかタイムアウトになるか、I/O 処理が完了すると、スレッドは実行可能状態に戻ります。

5. 待機中: この状態に入ったスレッドは、他のスレッドが特定のアクション (通知または中断) を行うのを待つ必要があります。

6. ブロッキング: スレッドが内部オブジェクト ロック (非 java.util.concurrent ライブラリ ロック) を取得しようとし、そのロックが他のスレッドによって保持されている場合、スレッドはブロッキング状態になります。

7. 待機中: スレッドが別のスレッドがスケジューラに条件を通知するのを待機すると、スレッドは待機状態に入ります。たとえば、Object.wait()、Thread.join() を呼び出し、Lock または Condition を待ちます。

8. タイムアウト待機 (TIMED_WAITING): この状態は WAITING とは異なり、指定された時間が経過すると自動的に復帰します。

9. TERMINATED: スレッドが実行を完了したことを示します。

以上がJavaの同時実行性とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。