1. 程式人生 > >java多執行緒小示例詳解

java多執行緒小示例詳解


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;
		}
	}

}

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