Thead クラスを継承してマルチスレッドを実装します。
利点: 記述が簡単。現在のスレッドにアクセスする必要がある場合は、Thead.currentThread() メソッドを使用する代わりにこれを使用するだけです。
欠点: このスレッド クラスは Thead クラスを継承しているため、他のクラスを継承できません。
サンプルコード:
次のようにコードをコピーします。
パッケージ org.frzh.thread;
public class FirstThread extends Thread{
プライベート int i;
// run メソッドを書き換えます。 run メソッドのメソッド本体はスレッドの実行本体です。
public void run() {
for (; i < 100; i++) {
//スレッド クラスが Thread クラスを継承する場合、getName メソッドを直接呼び出して現在のスレッド名を取得できます。
// 現在のスレッドを取得したい場合は、これを直接使用してください
//Thread オブジェクトの getName メソッドは、現在のスレッドの名前を返します。
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
// Thead の currentThread メソッドを呼び出して現在のスレッドを取得します
System.out.println(Thread.currentThread().getName() + " " +i);
if (i == 20) {
新しいFirstThread().start();
新しいFirstThread().start();
}
}
}
}
実行結果のスニペット:
2 つのサブスレッドの i の値が連続していないことがわかりました。これは、サブスレッドによるデータの直接共有について述べたことと矛盾しているように思えます。実際、ここではそれぞれ独自のインスタンス変数 i を持つ 2 つのサブスレッドをインスタンス化します。
Runable インターフェースを実装するマルチスレッドの使用:
利点: スレッド クラスは Runable インターフェイスのみを実装するため、他のクラスも継承できます。
この場合、複数のスレッドがターゲット オブジェクトを共有できるため、複数のスレッドが同じリソースを処理するのに非常に適しており、CPU、コード、データを分離して明確なモデルを形成し、オブジェクト指向の考え方をより適切に反映できます。 。
欠点: プログラミングは少し複雑です。現在のスレッドにアクセスしたい場合は、Thread.currentThread メソッドを使用する必要があります。
サンプルコード:
次のようにコードをコピーします。
パッケージ org.frzh.thread;
パブリック クラス SecondThread は Runnable{ を実装します
プライベート int i;
@オーバーライド
public void run() {
// TODO 自動生成されたメソッド スタブ
for (; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20) {
SecondThread st = 新しい SecondThread();
new Thread(st, "子スレッド 1").start();
new Thread(st, "子スレッド 2").start();
}
}
}
}
実行結果のスニペット:
スレッド1とスレッド2は同じターゲットを共有しているため、このときのiの値が連続的に変化していることがわかります。