首页 > 代码库 > java thread------------线程死亡、join

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