第二十五:多线程两种实现方式的联系与线程的生命周期

一.

给创建的线程命名,线程的sleep方法

public class TwoThreadsTest {
	public static void main(String[] args) {
		new SimpleThread("hello").start();// hello为新分配的 Thread 对象的名称
		new SimpleThread("world").start();// 如果不给名称,系统会自动取一个名称Thread-n
	}
}

class SimpleThread extends Thread {
	public SimpleThread(String name) {
		// super(name);// 调用父类(Thread)的构造方法
		this.setName(name);// 改变线程名称,使之与参数 name 相同。
	}

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(i + " " + this.getName());// 获取当前线程的名称
			try {
				sleep((long) (Math.random() * 5000));//随机睡眠(0-5000毫秒)
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("DONE!" + this.getName());
		}
	}
}


二.

判断一个线程是否处于活动状态(isAlive())

测试线程是否处于活动状态。如果线程已经启动且尚未终止,则为活动状态。

//判断一个线程是否处于活动状态
public class AliveTest {
	public static void main(String[] args) {

		Thread thread = new Thread(new ThreadMe());
		
		//线程还未启动
		System.out.println(thread.isAlive());// 测试线程是否处于活动状态。
		
		//线程启动
		thread.start();
		for(int i=0;i<100;i++){
			System.out.println(thread.isAlive());
		}
	}
}

class ThreadMe implements Runnable {

	public void run() {
		System.out.println("hello world");
	}

}


三.

线程的Join()方法:等待一个线程终止才运行自己的线程(从断开位置开始往下执行)

//等待一个线程去消亡,然后执行自己......
public class JoinTest {
	public static void main(String[] args) throws InterruptedException {
		My my=new My();
		my.start();
		System.out.println("hello");//main主线程执行,遇到其他线程的Join方法,就等待...
		my.join();//等待该线程终止。
		System.out.println("hello world");
	}
}

class My extends Thread{
	@Override
	public void run(){
		for(int i=0;i<10;i++){
			try {
				System.out.println("my thread"+i);
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}



你可能感兴趣的:(生命周期)