スレッドプールのコンテンツを後で詳細に紹介します。まず、スレッドを理解して実行できます。この章の内容には、次のものが含まれます。
スレッドと実行可能な概要
スレッドと実行可能な類似点と相違点
スレッドと実行可能のマルチスレッドの例
スレッドと実行可能な概要
Runnableは、1つのrun()メソッドのみを含むインターフェイスです。その定義は次のとおりです。
コードコピーは次のとおりです。
public interface runnable {
パブリックアブストラクトvoid run();
}
Runnableの役割は、マルチスレッドを実装します。クラスAを定義して、実行可能なインターフェイスを実装できます。
スレッドはクラスです。スレッド自体は、実行可能なインターフェイスを実装します。その声明は次のとおりです。
パブリッククラスのスレッド実装{}
スレッドの役割は、マルチスレッドを実現することです。
スレッドと実行可能な類似点と相違点
スレッドと実行可能な類似性:両方とも「マルチスレッドの実装」です。
スレッドと実行可能な違い:
スレッドはクラスであり、Runnableはインターフェイス自体です。 「クラスには1つの親クラスしか持てないが、複数のインターフェイスを実装できる」ことがわかっているため、Runnableのスケーラビリティが優れていることがわかっています。
さらに、Runnableは「リソースの共有」にも使用できます。つまり、特定の実行可能なオブジェクトに基づいて複数のスレッドが作成され、実行可能なオブジェクトでリソースを共有します。
一般的に、「Runnable」を介してマルチスレッドを実装することをお勧めします!
スレッドと実行可能のマルチスレッド例
1。スレッドのマルチスレッドの例
以下では、例を介してスレッドをよりよく理解し、実行可能なものをよりよく理解し、より説得力のあるオンラインの例を描くことができます。
コードコピーは次のとおりです。
// threadtest.javaソースコード
クラスmythreadはスレッドを拡張します{
プライベートINTチケット= 10;
public void run(){
for(int i = 0; i <20; i ++){
if(this.ticket> 0){
System.out.println(this.getName()+"チケット販売:チケット"+this.ticket-);
}
}
}
};
パブリッククラスのスレッドテスト{
public static void main(string [] args){
// 3つのスレッドT1、T2、T3を開始します。
mythread t1 = new mythread();
mythread t2 = new mythread();
mythread t3 = new mythread();
t1.start();
t2.start();
t3.Start();
}
}
実行結果:
コードコピーは次のとおりです。
スレッド0チケット販売:チケット10
スレッド1チケット販売:チケット10
スレッド2チケット販売:チケット10
スレッド1チケット販売:チケット9
スレッド-0チケット販売:Ticket9
スレッド1チケット販売:チケット8
スレッド2チケット販売:チケット9
スレッド1チケット販売:チケット7
スレッド0チケット販売:チケット8
スレッド1チケット販売:チケット6
スレッド2チケット販売:チケット8
スレッド1チケット販売:チケット5
スレッド0チケット販売:チケット7
スレッド1チケット:チケット4
スレッド2チケット販売:チケット7
スレッド1チケット販売:Ticket3
スレッド0チケット販売:チケット6
スレッド1チケット販売:チケット2
スレッド2チケット販売:チケット6
結果説明:
(01)Mythreadは、カスタムスレッドであるスレッドから継承されます。各Mythreadは10枚のチケットを販売しています。
(02)メインスレッドメインは、3つのMythread Childスレッドを作成して開始します。各チャイルドスレッドは10枚のチケットを販売しています。
2。Runnableのマルチスレッドの例
次に、上記のプログラムを変更します。 Runnableを介してインターフェイスを実装し、マルチスレッドを実装します。
コードコピーは次のとおりです。
// runnabletest.javaソースコード
クラスのmythreadは実行可能{
プライベートINTチケット= 10;
public void run(){
for(int i = 0; i <20; i ++){
if(this.ticket> 0){
system.out.println(thread.currentthread()。getname()+"チケット販売:チケット"+this.ticket-);
}
}
}
};
public class runnabletest {
public static void main(string [] args){
mythread mt = new mythread();
// 3つのスレッドT1、T2、T3を起動し(実行可能なオブジェクトを共有)、これらの3つのスレッドは合計10枚のチケットを販売しています!
スレッドT1 =新しいスレッド(MT);
スレッドT2 =新しいスレッド(MT);
スレッドT3 =新しいスレッド(MT);
t1.start();
t2.start();
t3.Start();
}
}
実行結果:
コードコピーは次のとおりです。
スレッド0チケット販売:チケット10
スレッド2チケット販売:チケット8
スレッド1チケット販売:チケット9
スレッド2チケット販売:チケット6
スレッド0チケット販売:チケット7
スレッド2チケット:チケット4
スレッド1チケット販売:チケット5
スレッド2チケット:チケット2
スレッド-0チケット販売:チケット3
スレッド1チケット:チケット1
結果説明:
(01)上記の「Mythreadがスレッドから継承する」とは異なります。
(02)メインスレッドメインは3つの子スレッドを作成および開始し、これら3つの子スレッドはすべて「MT、実行可能オブジェクト」に基づいて作成されます。操作の結果、これらの3つの子スレッドは合計10枚のチケットを販売しました。これは、Mythreadインターフェイスを共有することを意味します。