まず、Javaスレッドの各段階の実行ステータスを見てみましょう
スレッドはプロセスのエンティティであり、システムによって独立してスケジュールされ、発送される基本ユニットです。同じプロセスに属する他のスレッドでのプロセス。 1つのスレッドが別のスレッドを作成および元に戻すことができ、同じプロセスの複数のスレッドを同時に実行できます。スレッド間の相互の制約により、操作中にスレッドは断続的に見えます。
スレッドを導入するオペレーティングシステムでは、プロセスは通常、リソースを割り当てるための基本ユニットとして使用され、スレッドは独立した操作と独立したスケジューリングの基本ユニットとして使用されます。スレッドはプロセスよりも小さく、基本的にシステムリソースを所有していないため、スケジューリングのオーバーヘッドははるかに小さくなり、システム内の複数のプログラム間の同時実行の程度をより効率的に改善することができ、それによりシステムリソースの利用とスループットが大幅に改善されます。
スレッドは、プログラム内の単一のシーケンシャル制御プロセスです。単一のプログラムで複数のスレッドを同時に実行して、マルチスレッドと呼ばれるさまざまな作業を完了します。
マルチスレッドは、主にCPU時間を節約し、スレッドを使用する必要があります。
マルチスレッドは、複数のタスクを同時に完了し、運用効率を向上させるのではなく、システム効率を改善するためのリソースの使用効率を改善することです。スレッドは、複数のタスクを同時に完了する必要がある場合に実装されます。
Javaにマルチスレッドを実装するには、2つの方法があります
1。スレッドクラスを継承します
2。実行可能なインターフェイスを実装します
これら2つの方法の一般的なポイントは何ですか:
どの方法を使用しても、スレッド(スレッドサブクラスの場合は、それ自体を使用)を使用してスレッドを生成する必要があります。
2つの方法の違い:
1.スレッドクラスを継承することの不利な点の1つは単一の継承ですが、実行可能なインターフェイスを実装することはその欠点を補い、複数の継承を達成できます。
2.スレッドクラスを継承する場合、実行可能なインスタンスオブジェクトを生成する場合、複数の実行可能なインスタンスオブジェクトを生成し、スレッドを使用して複数のスレッドを実装する必要があります。このクラスを使用して、このインスタンスを使用します。つまり、リソース共有が実現します
上記の2つのポイントに基づいて、2番目の方法を使用することをお勧めします
以下は説明する例です
プログラム1:
パッケージcom.dr.runnable1; /マルチスレッドを使用する場合は、メソッドパブリックvoid run(){// printout for(int i = 0; i <10; i ++){system.out.println(this.name+"---- - > run ,,, ");}}} public class demo1 {public static void main(string args []){// runnable r1 = new mythread(" thread a "); runnable r2 = new Mythread (「スレッドB」)。 ); t2.start(); //スレッド実行、// mt2.run();方法// mythread mt1 = new mythread( "thread a"); // mythread mt2 = new mythread( "thread b"); // mythread mt3 = new mythread( "thread c"); // mt1.start() ; // mt1.start(); //スレッドは1回しか開始できません// mt2.start(); // mt3.start()};プログラムの実行結果は次のとおりです。
これはスレッドクラスを継承しています。最初の方法は複数の実行可能なインスタンスオブジェクトを生成し、スレッドを使用して複数のスレッドを生成します
2番目の方法は、このクラスがスレッドクラスを継承しているため、それを直接使用して複数のスレッドを生成できることです。
プログラム2:
パッケージcom.dr.runnable1; class mythread1はrunnable {private int quip = 10; for(int i = 0; i <500; i ++){if(this.t icket> 0){system。 out .println( "ticket ----->"+(this.ticket-); :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: ::::::::::::::::::::のスレッド=新しいスレッド(MT); (mt); t2.start();プログラムの実行結果:
このプログラムは、実行可能な実装を実装し、インスタンスオブジェクトのクラスを生成し、スレッドを使用して複数のスレッドを生成します。