java - isAlive()方法疑问
大家讲道理
大家讲道理 2017-04-17 17:46:59
0
1
174

package com.brianway.learning.java.multithread.communication.example0;
public class IsAlive extends Thread {

@Override
public void run() {
    System.out.println("run---" + this.isAlive());
}
public static void main(String args[]) {
    IsAlive isAlive = new IsAlive();
    Thread thread = new Thread(isAlive);
    System.out.println("begin---" + thread.isAlive());
    thread.start(); //[1]
    thread.run(); //[2]
    isAlive.start(); //[3]
    isAlive.run(); //[4]
    System.out.println("end---" + thread.isAlive());
}

}

如图所示代码,注释[2] [3] [4]步,则打印:
begin---false
end---true
run---false 这个不懂为什么?

如图所示代码,注释[1] [3] [4]步,则打印:
begin---false
run---false 这个难道是随机的么?可能为true,也可能为false
end---false

如图所示代码,注释[1] [2] [4]步,则打印:这种情况比较好理解
begin---false
end---false
run---true

如图所示代码,注释[1] [2] [3]步,则打印:
begin---false
run---false 为什么使用isAlive.run()的时候,是false呢?
end---false

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(1)
伊谢尔伦

いくつかの概念を明確にします。Thread オブジェクトは、start() メソッドを使用して開始された場合にのみスレッドが確立され、実行されると見なされます。run() メソッドが直接呼び出された場合のみ、すべてのプログラムが実行されます。現在の既製の環境では、新しいスレッドが作成されます。次に、Thread オブジェクト構築メソッドは Runnable インターフェースのオブジェクトを配置でき、ThreadRunnable を実装できるため、それにスレッドを追加できますが、いつ挿入されるかというとそうではありません。スレッドは実行中です。そこに移動する Thread オブジェクトもスレッドになり、その run() メソッドのみが呼び出されます。したがって、あなたの例では、 isAlive.start() を直接呼び出してスレッドを作成する場合を除いて、他のメソッド isAlive は独立したスレッドでオブジェクトを実行しないため、すべて false になります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!