java线程死亡_java thread------------线程死亡、join

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);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值