1. 程式人生 > >執行緒 之 建立(兩種方法)和啟動

執行緒 之 建立(兩種方法)和啟動

java使用Thread類代表執行緒,所有的執行緒物件都必須是Thread 類或者子類的例項。

每個執行緒的任務是完成一定的任務,就是執行一段程式流。

目前有兩種建立方式(第三種後續補充) 一種是繼承Thread類 一種是實現Runnable介面`

一、繼承Thread類 1.定義Thread子類,並重寫run()方法。 run()方法內就是執行緒需要完成的任務,因此可以將run()方法稱為執行緒執行體。 2.建立Thread子類的例項,也就是建立執行緒物件。 3.執行緒物件呼叫start()方法,啟動執行緒。

package myclass; //包:編譯時需要:javac -d e:\java基礎 FirstThread.java 在當前資料夾中顯示class檔案 //執行前:set classpath=e:\java基礎 //執行:java myclass.FirstThread //定義Thread子類,用來繼承Thread類 class SecondThread extends Thread { private int i; //呼叫run()方法,run()放就是執行緒的執行體。 public void run() { for( ;i<100;i++) { //當執行緒繼承Thread類後,直接使用this即可或得當前執行緒。 //Thread類物件的getName()返回當前執行緒的名字。 System.out.println(this.getName() + " " + i ); } } } public class FirstThread { public static void main(String[] args) { for(int x=0;x<100;x++) { //呼叫Thread類的currentThread()方法來獲取當前執行緒 System.out.println(Thread.currentThread().getName()+ " " + x); if(x == 20) { //建立子類的例項 SecondThread st = new SecondThread(); //啟動執行緒,執行緒只能呼叫一次start()方法,否則就會發生異常。 st.start(); } } } }

其中包括兩個執行緒: 1.是程式顯式建立並啟動了一個執行緒。 會被this.getName()獲取呼叫該方法的執行緒的名字。 2.main()方法的方法體代表主執行緒的執行緒執行體。 會被Thread.currentThread().getName()方法打印出來名字

注意:1.重寫的run()方法可以作為一般方法來進行呼叫,這種呼叫不會出現執行緒。 同樣run()方法也可以被過載,過載後的的run()方法也不是執行緒。 2.這兩個迴圈變數不連續,表示他們沒有共享資料

二、實現Runnable介面建立執行緒類 1.建類實現介面 2.覆蓋Runnable介面中的run()方法,將要執行的程式碼放在run()中 3.通過Thread類建立物件 4.將Runnable介面的子類作為實參傳遞給Thread類的建構函式中 5.呼叫Thread類的start()方法開啟執行緒。

package myclass; class ThreadDemo implements Runnable //實現介面Runnable { private int i; //覆蓋介面中的run()方法,run()方法中是程式的執行體。 public void run() { for( ; i<100 ;i++) { //當執行緒實現Runnable後,就只能使用Thread.currentThread().getName() //方法獲取當前執行緒的名字。 System.out.println(Thread.currentThread().getName() + " " + i); } } }

class SecondThread { public static void main(String[] args) { for(int x=0;x<100;x++) { System.out.println(Thread.currentThread().getName() + " " +x); if(x == 20) { //建立Runnable介面的子類物件 ThreadDemo st = new ThreadDemo(); //將該子類物件作為實參傳入到Thread建構函式中 Thread t1 = new Thread(st); Thread t2 = new Thread(st); t1.start(); t2.start();

       }
    }
 }

}

Runnable介面可以共享同一個執行緒類的例項變數。

Runnable 的優缺點是: 優點: 1.執行緒類實現了Runnable 類還可以繼承其他類。 2.在陣中情況下,可以共享同一個target物件,所以適合多個執行緒來處理同一份資源,從而將程式碼,資料,cup分開,形成較為清晰的模型,較好地體現了面對物件的思想 缺點: 如果需要訪問當前執行緒,只能使用Thread.currentThread()方法。

Thread的優缺點: 缺點:因為繼承了Thread類,所以不能再繼承其他類 優點:如果需要訪問當前執行緒,直接使用this.就行。