Javaでのスレッドの作成と起動の2つの方法
2836 ワード
方式1:Threadクラスを継承する
手順:
1):クラスAがjavaに継承することを定義する.lang.Threadクラス
2):AクラスでThreadクラスのrunメソッドを上書きする.
3):我々はrun方法の中で実行する操作を書く:run方法の中のコード、スレッド実行体.
4):mainメソッド(スレッド)で、スレッドオブジェクトを作成し、スレッドを開始します.
(1)スレッドクラスオブジェクトの作成:
Aクラスa=new Aクラス();
(2)スレッドオブジェクトを呼び出すstartメソッド:
a.start();//スレッドを開始
注意:runメソッドを呼び出さないでください.runメソッドを呼び出すのはオブジェクト呼び出しメソッドのようなもので、依然として1つのスレッドしかなく、新しいスレッドが開いていません.
スレッドは1回しか起動できません!
起動スレッドインスタンスを作成するには、次の手順に従います.
方式2:Runnableインタフェースを実現する
手順:
1):クラスAがjavaに実装ことを定義する.lang.Runnableインタフェース、Aクラスはスレッドクラスではないことに注意してください.
2):AクラスでRunnableインタフェースのrunメソッドを上書きする.
3):runメソッドで実行する操作を記述する:runメソッドのスレッド実行体.
4):mainメソッド(スレッド)で、スレッドオブジェクトを作成し、スレッドを開始します.
(1)スレッドクラスオブジェクトの作成:
Thread t = new Thread(new A());
(2)スレッドオブジェクトを呼び出すstartメソッド:
t.start();
継承方式と実現方式の違いを分析する:
継承方式:1):Javaではクラスが単一に継承されているが,Threadを継承すると,そのクラスには他の直接親は存在しない.2):操作上の分析から、継承方式はもっと簡単で、スレッド名を取得するのも簡単である.(操作上、より簡単)3):マルチスレッド共有同一リソース上から分析する、継承方式ができない.
したがって、Runnableインタフェースを実装スレッド実装方式を作成し、起動することを強く提案する:1):設計上の分析から、Java中のクラスはインタフェースを複数実装ことができ、この場合、このクラスは他のクラスを継承することができ、また他のインタフェースを実現することができ、設計がより合理的である.2):操作上の分析では,実装方式がやや複雑である点,スレッド名の取得も比較的複雑である点,Threadを用いなければならない.currentThread()は、現在のスレッドの参照を取得する.
3):マルチスレッド共有同一資源から分析し、実現方式は(同一資源を共有するかどうか)可能である.
補足:スレッド名の取得方法:
String name = Thread.currentThread().getName()
手順:
1):クラスAがjavaに継承することを定義する.lang.Threadクラス
2):AクラスでThreadクラスのrunメソッドを上書きする.
3):我々はrun方法の中で実行する操作を書く:run方法の中のコード、スレッド実行体.
4):mainメソッド(スレッド)で、スレッドオブジェクトを作成し、スレッドを開始します.
(1)スレッドクラスオブジェクトの作成:
Aクラスa=new Aクラス();
(2)スレッドオブジェクトを呼び出すstartメソッド:
a.start();//スレッドを開始
注意:runメソッドを呼び出さないでください.runメソッドを呼び出すのはオブジェクト呼び出しメソッドのようなもので、依然として1つのスレッドしかなく、新しいスレッドが開いていません.
スレッドは1回しか起動できません!
起動スレッドインスタンスを作成するには、次の手順に従います.
//1): A java.lang.Thread .
class MusicThread extends Thread{
//2): A Thread run .
public void run() {
//3): run
for(int i = 0; i < 50; i ++){
System.out.println(" "+i);
}
}
}
public class ExtendsThreadDemo {
public static void main(String[] args) {
for(int j = 0; j < 50; j ++){
System.out.println(" "+j);
if(j == 10){
//4): main ( ) , , .
MusicThread music = new MusicThread();
music.start();
}
}
}
}
方式2:Runnableインタフェースを実現する
手順:
1):クラスAがjavaに実装ことを定義する.lang.Runnableインタフェース、Aクラスはスレッドクラスではないことに注意してください.
2):AクラスでRunnableインタフェースのrunメソッドを上書きする.
3):runメソッドで実行する操作を記述する:runメソッドのスレッド実行体.
4):mainメソッド(スレッド)で、スレッドオブジェクトを作成し、スレッドを開始します.
(1)スレッドクラスオブジェクトの作成:
Thread t = new Thread(new A());
(2)スレッドオブジェクトを呼び出すstartメソッド:
t.start();
//1): A java.lang.Runnable , A .
class MusicImplements implements Runnable{
//2): A Runnable run .
public void run() {
//3): run
for(int i = 0; i < 50; i ++){
System.out.println(" "+i);
}
}
}
public class ImplementsRunnableDemo {
public static void main(String[] args) {
for(int j = 0; j < 50; j ++){
System.out.println(" "+j);
if(j == 10){
//4): main ( ) , ,
MusicImplements mi = new MusicImplements();
Thread t = new Thread(mi);
t.start();
}
}
}
}
継承方式と実現方式の違いを分析する:
継承方式:1):Javaではクラスが単一に継承されているが,Threadを継承すると,そのクラスには他の直接親は存在しない.2):操作上の分析から、継承方式はもっと簡単で、スレッド名を取得するのも簡単である.(操作上、より簡単)3):マルチスレッド共有同一リソース上から分析する、継承方式ができない.
したがって、Runnableインタフェースを実装スレッド実装方式を作成し、起動することを強く提案する:1):設計上の分析から、Java中のクラスはインタフェースを複数実装ことができ、この場合、このクラスは他のクラスを継承することができ、また他のインタフェースを実現することができ、設計がより合理的である.2):操作上の分析では,実装方式がやや複雑である点,スレッド名の取得も比較的複雑である点,Threadを用いなければならない.currentThread()は、現在のスレッドの参照を取得する.
3):マルチスレッド共有同一資源から分析し、実現方式は(同一資源を共有するかどうか)可能である.
補足:スレッド名の取得方法:
String name = Thread.currentThread().getName()