標籤:this 包括 簡單例子 自己的 start join() 包含 定義 16px
簡單介紹
線程是程式啟動並執行基本執行單元。當作業系統(不包括單線程的作業系統,如微軟早期的DOS)在執行一個程式時,會在系統中建立一個進程,而在這個進程中,必須至少建立一個線程(這個線程被稱為主線程)來作為這個程式啟動並執行進入點。因此,在作業系統中啟動並執行任何程式都至少有一個主線程。
線程不僅可以共用進程的記憶體,而且還擁有一個屬於自己的記憶體空間,這段線程不僅可以共用進程的記憶體,而且還擁有一個屬於自己的記憶體空間,這段部所使用的資料,如線程執行函數中所定義的變數。
注意:任何一個線程在建立時都會執行一個函數,這個函數叫做線程執行函線程類的一些常用方法
sleep(): 強迫一個線程睡眠N毫秒。
isAlive(): 判斷一個線程是否存活。
join(): 等待線程終止。 //只有等到子線程結束了主線程才能執行。(Waits for this thread to die.)
activeCount(): 程式中活躍的線程數。
enumerate(): 枚舉程式中的線程。
currentThread(): 得到當前線程。
isDaemon(): 一個線程是否為守護線程。
setDaemon(): 設定一個線程為守護線程。(使用者線程和守護線程的區別在於,是否等待主線程依賴於主線程結束而結束)
setName(): 為線程設定一個名稱。
wait(): 強迫一個線程等待。
notify(): 通知一個線程繼續運行。
setPriority(): 設定一個線程的優先順序
多線程的實現方式
通過以下兩種方法建立 Thread 對象:
繼承Thread
Java中“一切皆對象”,線程也被封裝成一個對象。我們可以通過繼承Thread類來建立線程。線程類中的的run()方法包含了該線程應該執行的指令。我們在衍生類中覆蓋該方法,以便向線程說明要做的任務:
聲明一個 Thread 類的子類,並覆蓋 run() 方法
class myThread extends Thread{ @Override public void run() { System.out.println("繼承Thread"); }}
簡單例子
main執行
System.out.println("多線程開始:"); for(int i=1;i<=10;i++) { stat(i); }
//隨機延遲
public static int reandom(int stop,int stat ){
return (int)Math.round(Math.random()*(stat-stop)+stop);
}
public static void stat(int i){ System.out.print("線程:"+i+" 開始運行"); Thread t=new Thread(){ public void run(){ System.out.println(UUID.randomUUID()); } }; int s=reandom(5,2); System.out.print(" 延遲:"+s+"秒 唯一UUID:"); try { t.sleep(s*1000); } catch (InterruptedException e) { e.printStackTrace(); } t.start(); try { t.join(); } catch (InterruptedException e) { e.printStackTrace(); }
固定線程
//固定線程10 ExecutorService service =Executors.newFixedThreadPool(10); for (int i = 0; i < 23; i++) { service.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread()); } }); }
java多線程(簡單介紹)