Java を学んだことのある人なら誰でも、Java がマルチスレッドを一元的にサポートする数少ない言語の 1 つであることを知っています。ほとんどの言語は単一のプログラム ブロックをインテリジェントに実行し、複数の異なるプログラム ブロックを同時に実行することはできません。 Java のマルチスレッド機構 この欠点を補うために、異なるプログラム ブロックを一緒に実行することで、プログラムをよりスムーズに実行し、マルチタスクの目的を達成できます:
1. スレッドの概念とプロセス
今、オペレーティングシステムはマルチタスクオペレーティングシステムです。マルチスレッドはマルチタスクを実現する方法です。
プロセスとは、メモリ上で動作するアプリケーションを指します。 1つのプロセス内で複数のスレッドを起動できます。たとえば、Windows システムでは、実行中の exe がプロセスです。スレッドはプロセス内の実行フローを指し、1 つのプロセス内で複数のスレッドを実行できます。たとえば、java.exe プロセスでは多くのスレッドを実行できます。スレッドは常にプロセスに属し、プロセス内の複数のスレッドがプロセスのメモリを共有します。 「同時」実行は人間の認識であり、実行は実際にはスレッド間でローテーションされます。
2. Java でのスレッドの実装
Java でマルチスレッドを実現するには、Thread クラスを統合する方法と、Runnable インターフェイスを実装する方法があります。 Thread クラスから継承されたスレッドの作成原理を見てみましょう:
まず、スレッド クラスを定義します。このクラスは Thread クラスから継承する必要があり、run() メソッドは明示的にオーバーライドされる必要があります
例:
class MyThread extends Thread{ public void run(){ //覆写Thread类中的run方法此方法是线程中 线程主体; 的主体 }
次に、スレッド クラスのメイン クラスとインスタンス オブジェクトを定義し、スレッドを開始するコマンドを起動します
例:
public class ThreadText{ public stataic void main(String args[]){ MyThread m1=new MyThread();//实例化对象 m1.start();//启动多线程 } };
Runnable インターフェイスを実装します:
まず、Runnable インターフェイスから継承するスレッド クラスを定義します
例:
class MyThread implements Runnable{ public void run(){ //覆写Runnable接口中的run方法 线程主体; }
次に、メインクラスを定義し、スレッド Class オブジェクトをインスタンス化し、スレッドを開始するコマンドを開始します
例:
public class ThreadText{ public stataic void main(String args[]){ MyThread m1=new MyThread();//实例化Runnable子类对象 Thread t1=new Thread(m1);//实例化Thread类对象 t1.start();//启动多线程 } };
3. スレッドのいくつかの状態
Java では、スレッドには通常 5 つの状態があります、作成、準備完了、実行中、ブロック、およびデッド。
一つ目は、状態を作ることです。スレッド オブジェクトが生成されるとき、オブジェクトの start メソッドは呼び出されません。これは、スレッドが作成状態にあることを意味します。
2つ目は準備完了状態です。スレッドオブジェクトのstartメソッドが呼び出されると、スレッドは準備完了状態になりますが、この時点ではスレッドスケジューラがスレッドをカレントスレッドとして設定しておらず、この時点では準備完了状態となっています。スレッドの実行後、待機またはスリープ状態から戻った後も準備完了状態になります。
3つ目は走行状況です。スレッド スケジューラは、準備完了状態のスレッドを現在のスレッドとして設定し、この時点でスレッドは実行状態になり、run 関数でコードの実行を開始します。
4つ目はブロッキング状態です。スレッドの実行中は、通常、実行を続行する前に一定時間待機する (たとえば、特定のリソースの準備が整う) ため、スレッドは一時停止されます。スリープ、サスペンド、待機などのメソッドはスレッドのブロックを引き起こす可能性があります。
5つ目は、死の状態です。スレッドの run メソッドが終了するか stop メソッドが呼び出されると、スレッドは終了します。スレッドが停止した場合、start メソッドを使用してスレッドを準備することはできません。
以上がJava のマルチスレッドの原理を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。