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);
		}
	}
}
时间: 2024-10-14 17:52:41

java thread------------线程死亡、join的相关文章

JAVA Thread线程异常监控

一.场景描述:单线程程序可以用try...catch捕获程序的异常,而在多线程程序的时候是无法使用try...catch捕获. 示例1:多线程发生异常,无法使用try...catch捕获问题 public class NoCaughtThread implements Runnable{ @Override public void run() { System.out.println(3 / 2); System.out.println(3 / 0); System.out.println(3

communication between threads 线程间通信 Programming Concurrent Activities 程序设计中的并发活动 Ada task 任务 Java thread 线程

Computer Science An Overview _J. Glenn Brookshear _11th Edition activation 激活 parallel processing 并行处理 concurrent processing 并发处理 Each programming language tends to approach the parallel processing paradigm from its own point of view, resulting in di

Java Thread join() 的用法

Java Thread中, join() 方法主要是让调用改方法的thread完成run方法里面的东西后, 在执行join()方法后面的代码.示例: Java代码   class ThreadTesterA implements Runnable { private int counter; @Override public void run() { while (counter <= 10) { System.out.print("Counter = " + counter +

Java线程--interrupt join yield setDaemon常用方法的使用

概念: 操作系统可以有多个进程,一个线程可以有一个或多个线程.进程与进程之间不共享内存,都在各自的空间中运行.而线程不仅可以共享内存,还可以用有一个自己的内存空间,叫做线程栈. 线程又称轻量级进程.Java的线程是靠CPU时间片的快速切换实现的,并不是真正的同时进行.每个线程有独立的线程栈和程序计数器.线程在自己的栈中存储变量,使数据互不干扰,对于共同资源,容易引发并发问题,需要同步处理. 创建线程常用的两种方式: 1.继承Thread类,重写run() 2.实现Runnable接口 线程生命周

java基础知识回顾之java Thread类学习(十)--线程的状态以及转化使用的方法介绍

   线程的概述:         线程是程序的多个执行路径,执行调度的单位,依托于进程存在.线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间叫做线程栈,是建立线程的时候由系统分配的,主要用来保存线程内部的数据,如线程执行函数中定义的变量.   java中多线程是一种抢占机制而不是分时机制.抢占机制是指CPU资源师被多个线程所共享,多个线程处于可运行状态,但是只允许一个线程在运行,他们通过竞争的方式抢占CPU.可以参考java 进程与线程的区别  线程的状态: 新生状态

thread.join函数,java多线程中的join函数解析

join函数的作用,是让当前线程等待,直到调用join()的 线程结束或者等到一段时间,我们来看以下代码 1 package mian; 2 3 4 public class simpleplela { 5 static void threadMessage(String message) { 6 String threadName = 7 Thread.currentThread().getName(); 8 9 System.out.println(threadName+" "+m

Thread线程join方法自我理解

thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.join();后面的代码 thread.join(long time):线程thread等待time时间之后,main-thread可以执行,注意time时间后,线程thread没有执行完,main-thread也可以运行 注意:上面2个方法必须在线程是alive的时候,才有这样的效果,否则不会有. join()方法源码是有调用wait()

Java中线程(Thread)知识概括

Java中线程(Thread)知识概括 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行. 一个进程中至少有一个线程. 例如:Java VM 启动的时候会有一个进程java.exe.该进程中至少一个线程负责java程序的执行,而且这个线程运行的代码存在于main方法中.该线程称之为主线程.jvm启动不止一个线程,还有负责垃圾回收机制等线程. 如何在自定义的代码中,自定义一个线程呢

Java Thread.join的作用和原理

很多人对Thread.join的作用以及实现了解得很少,毕竟这个api我们很少使用.这篇文章仍然会结合使用及原理进行深度分析 内容导航 Thread.join的作用 Thread.join的实现原理 什么时候会使用Thread.join Thread.join的作用 之前有人问过我一个这样的面试题 Java中如何让多线程按照自己指定的顺序执行? 这个问题最简单的回答是通过Thread.join来实现,久而久之就让很多人误以为Thread.join是用来保证线程的顺序性的. 下面这段代码演示了Th