java thread------------线程死亡、joinpackage java_thread;
/*
* 线程的死亡状态
* 当以下3中情况出现时,将导致线程死亡
* 1、run()或call()方法执行完成,线程正常结束
* 2、线程抛出一个未捕获的Exception或Error
* 3、直接调用该线程的stop()方法来结束该线程(注意该方法已经过时,可能或导致死锁)
*/
public class StartDead extends Thread {
private int i = 0;
/*
* 线程体
*/
@Override
public void run() {
for (; i
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) {
StartDead sd = new StartDead();
for (int i = 0; i
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20) {
sd.start();
System.out.println(sd.isAlive());
}
if (i > 20 && !sd.isAlive()) {
//肯定是輸出false
System.out.println(sd.isAlive());
/*
* 当尝试对一个已经死亡的线程再次启动时,会报出exception
*/
// sd.start();
}
}
}
}
package java_thread;
/*
* 线程的join()方法
* 1、join()方法:是让一个线程等待另外一个线程完成的方法
* 2、在某个线程执行流中调用其他线程的join()方法时,该执行流(如main)将被阻塞,必须等到其他线程执行玩
*/
public class JoinThread extends Thread{
public static JoinThread jt = null;
/*
* 提供一个有参数的构造器来设置名字
*/
public JoinThread(String name) {
super(name);
}
/*
* 重写run()方法,定义线程体
*/
@Override
public void run() {
for (int i = 0; i
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) throws Exception{
/*
* 启动子线程
*/
JoinThread a = new JoinThread("新线程");
a.start();
//a.join();在这里也是一样,以下程序必须等待“新线程”执行完才能执行
// main:1~19跟“新线程”,被Join的线程是随机执行的
for (int i = 0; i
if(i==20){
jt = new JoinThread("被Join的线程");
jt.start();
/*
* main线程调用了jt线程的join()方法
* main线程必须等待jt执行结束才会向下执行
*/
//jt.join();
}
/*
* 所以main:20~99一定是最后执行的
*/
System.out.println(Thread.currentThread().getName() + " "+i);
}
}
}