java多執行緒小示例詳解
阿新 • • 發佈:2018-12-24
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()殺掉 } }
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; } } }
小示例完成,是不是感覺有多理解了呢!