java thread------------线程死亡join
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java thread------------线程死亡join相关的知识,希望对你有一定的参考价值。
java thread------------线程死亡、join
package 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 < 100; i++) { System.out.println(getName() + " " + i); } } public static void main(String[] args) { StartDead sd = new StartDead(); for (int i = 0; i < 300; 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 < 100; 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 < 100; 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); } } }
本文出自 “@coder” 博客,请务必保留此出处http://smallcoder.blog.51cto.com/11941149/1859992
以上是关于java thread------------线程死亡join的主要内容,如果未能解决你的问题,请参考以下文章