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

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가 됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!