java多线程小示例详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dfBeautifulLive/article/details/77053447


package com.chillax.controller;

import java.io.IOException;

public class MultiThread {
	public static void main(String[] args) {
		System.out.println("我是main主线程!");
		// 下面创建线程实例thread1
		ThreadUseExtends thread1 = new ThreadUseExtends();
		// 创建thread2时以实现了Runnable接口的THhreadUseRunnable类实例为参数
		Thread thread2 = new Thread(new ThreadUseRunnable());
		System.out.println("thread1主线程将挂起7秒!");
		thread1.start();// 启动线程thread1使之处于就绪状态
		try {
			// main主线程挂起7秒,而此时调用的子线程挂起10秒,同时一起执行,
			// 时间到达七秒后,主线程继续往下走
			Thread.sleep(7000);
		} catch (InterruptedException e) {
			return;
		}
		  System.out.println("又回到了main主线程!");
		  //走到这里判断thread1这子个线程还在存活没有,答案是存活的。
		  //原因是主线程休息7秒,子线程休息10秒,所以在此子线程还是执行的
		if (thread1.isAlive()) {//如果此线程已经开始但尚未正常终止或中止
			thread1.stop();// 如果thread1还存在则杀掉他
			System.out.println("ThreadUseExtends休眠过长,主线程杀掉了ThreadUseExtends!");
		} else //else没有大括号的情况下,如果判断符合条件进了if方法,那么else下的第一条语句是else大括号里的,
			   //其余的都为else大括号外的
			System.out.println("主线程没发现ThreadUseExtends,ThreadUseExtends已醒顺序执行结束了!");
		    thread2.start();//thread2就绪状态,随时可以调用, 把thread1。stop()后继续走 thread2.start()
		try {
			System.out.println("main主线程又将挂起7秒!");
			Thread.sleep(7000);// 主线程挂起7秒
		} catch (InterruptedException e) {
			return;
		}
		    System.out.println("又回到了主线程!");
		    //由于 thread2子线程等待时间为1秒,而主线程等待时间为7秒,所以thread2没有在休眠
		if (thread2.isAlive()) {//如果此线程已经开始但尚未正常终止或中止
			thread2.stop();// 如果thread2还存在则杀掉他
			System.out.println("ThreadUseRunnable休眠过长,主线程杀掉了ThreadUseRunnable!");
		} else
			System.out.println("主线程没发现ThreadUseRunnable,ThreadUseRunnable已醒顺序执行结束了!");
		    System.out.println("程序结束按任意键继续!");
		    try {
				System.in.read();
			} catch (IOException e) {
				 System.out.println(e.toString());
			}
	}
}

第一个子线程继承thread

package com.chillax.controller;

public class ThreadUseExtends extends Thread{
	ThreadUseExtends(){}
	public void run(){
		System.out.println("我是thread子类的线程实例!");
		System.out.println("我将挂起10秒!");
        System.out.println("回到主线程,请稍等,刚才主线程挂起可能还没醒过来!");
        try {
			sleep(15000);//这边ThreadUseExtends线程休息10秒
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
		    return;
		}
        //如果该run()方法顺序执行完了,线程将自动结束,而不会被主线程杀掉
        //但如果休眠时间过长,则线程还存活,可能被stop()杀掉
	}
}


第二个子线程实现Runnable


package com.chillax.controller;

public class ThreadUseRunnable implements Runnable {
	ThreadUseRunnable() {
	};

	@Override
	public void run() {
		System.out.println("我是ThreadUseRunnable类的线程实例并以实现了Runnable接口的类为参数!");
		System.out.println("我将挂起1秒!");
		System.out.println("回到主线程,请稍等,刚才主线程挂起可能还没醒过来!");
		try {
			Thread.sleep(1000);//等待1秒,和主线程同时一起执行等待
		} catch (InterruptedException e) {
		    return;
		}
	}

}

小示例完成,是不是感觉有多理解了呢!

猜你喜欢

转载自blog.csdn.net/dfBeautifulLive/article/details/77053447