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
몇 가지 개념을 명확하게 합니다.
Thread
메서드를 사용하여 시작한 경우에만start()
개체가 스레드를 설정하고 실행하는 것으로 간주할 수 있습니다.run()
메서드를 직접 호출하면 모든 프로그램이 실행됩니다. 현재 기성 환경에서 새로운 스레드가 생성됩니다. 둘째,Thread
객체 구축 방식은Runnable
인터페이스의 객체를 넣을 수 있고,Thread
도Runnable
을 구현하기 때문에 스레드를 추가할 수는 있지만, 언제 삽입된다는 뜻은 아니다. 스레드가 실행 중입니다.Thread
개체도 스레드로 바뀌고 해당run()
메서드가 호출됩니다. 따라서 귀하의 예에서는isAlive.start()
을 직접 호출하여 스레드를 생성하는 것을 제외하고 다른 메소드isAlive
는 독립 스레드에서 개체를 실행하지 않으므로 모두false
가 됩니다.