マルチスレッドとマルチプログラミング(1)
Multi Thread Programing
プロセスとスレッド
プロセス
プロセスは、プログラムとプロセス制御ブロックから構成されます.
プロセスは、独立したメモリ領域を個別に割り当てます.
山紅
このとき、Java Threadは通常のThreadとほとんど変わらず、JVM(Java Virtual Machine)はオペレーティングシステムの役割を果たす.
Javaにはプロセスは存在せず、スレッドのみであり、JavaスレッドはJVMスケジューリングの実行ユニットコードブロックである.
マルチタスクとマルチスレッド
マルチタスク処理とは、2つ以上のタスクを同時に処理することです.
例えば、映画を見るときにチャットツール機能を併用したり、音楽を聴いたりしてネットサーフィンを行うことは並行して処理することができる.これは、例えば、メッセージングでファイルとチャットを交換する場合、マルチスレッド(Multi Thread)に起因する可能性があるプロセスでも起こり得る.上の図に示すように、各プロセスはオペレーティングシステム(OS)から割り当てられた固有のメモリを相互に侵害することはできないが、マルチスレッドは各スレッドにコード、データ、heapを配置して共有するので、プロセスは予期せぬ異常で終了する可能性があるので注意してください.
start()とrun()
スレッドを実行するとrun()ではなくstart()が呼び出されます.これはstart()とrun()の違いと実行プロセスを理解する必要がある.
各スレッドは独立したタスクを実行するために独自の呼び出しスタックを必要とするため、新しいスレッドの作成と実行のたびに新しい呼び出しスタックが作成され、スレッドが終了すると、操作で使用される呼び出しスタックは消えます.
1.mainメソッドでThreedのstart()を呼び出します.
2.start()は、新しいスレッドを生成し、スレッドを処理するための呼び出しスタックを生成する.
3.新しく生成された呼び出しスタックでrun()を呼び出し、スレッドの独立した空間で操作を実行します.
4.現在、2つの呼び出しスタックがあり、スケジューラが指定した順序で順番に実行されます.
class MyThread extends Thread {
public void run() {
throwException();
}
public void throwException() {
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class Test {
public static void main(String[] args) {
MyThread my = new MyThread();
my.start();
}
}
start()ではなくrun()を直接実行すると、新しいスレッドを作成して起動するのではなくoverriding run()が呼び出されます.この場合、call Stackの最初のメソッドがmainとなり、mainでExceptionが生成されます.
ねじ状態
スレッドオブジェクトを作成しstart()メソッドを呼び出すと、スレッドはすぐに実行されるように見えますが、実際には実行待ちの状態になります.
待機中のスレッドでは、スレッドスケジューリングとして選択されたスレッドがCPUを占有しrun()メソッドを実行する.
この状態を「運転状態」と呼びます.実行状態のスレッドはrun()メソッドを実行する前に、スレッドスケジューリングによって実行待ち状態に戻ることができます.次に、実行待ち状態にある別のスレッドを選択し、実行状態にします.
これにより,Threadは待機状態と運転状態を交互に実行し,独自のrun()メソッドを逐次実行する.実行状態でrun()メソッドを終了すると、実行するコードがないため、スレッドの実行は停止します.
この状態を「終了状態」と呼ぶ.
Threedのライフサイクル
-Threadを実行する準備をするには
-
-占用CPU運転
-優先度が決定されると、JVMはrun()メソッドをrunningステータス
-実行中にすべてのスレッドを実行した後の完了ステータス(Done)
-CPU占有スペースが失われた場合、後続の方法を実行して実行可能状態に変換する
-wait()メソッドロックスレッドnotify()メソッド呼び出し時にRunnable状態に入る
-seep()メソッドでロックするスレッドは、指定された時間後に非稼働状態になる
せいぎょねじじょうたい
マルチスレッドプログラムを記述するためには,微細なスレッド状態制御が必要であり,状態制御が正しくないとプログラムが不安定になり,ハングアップする.マルチスレッドプログラミングが困難な原因はここにある.スレッドをうまく使用すると薬物になりますが、適切に使用しないと致命的なプログラムエラーが発生するため、スレッドを正しく制御する方法を熟知する必要があります.
スレッド制御をより良く行うためには,スレッド状態の変化を招く方法を把握する必要がある.次の図は、ステータスの変化を取得する方法のタイプを示しています.
-すべてのオブジェクトが持つ方法ではなく、オブジェクトが持つ方法です.
注意:国
注:組織コード工場
Reference
この問題について(マルチスレッドとマルチプログラミング(1)), 我々は、より多くの情報をここで見つけました https://velog.io/@youngblue/Multi-Thread-and-Multi-Programmingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol