執行緒知識點
一.如何建立執行緒?1.繼承thread 類並重寫其中的run方法。 1.1 定義一個類繼承Thread類 1.2 重寫run方法 1.3 建立物件,也就是執行緒物件 1.4 呼叫方法start,開啟執行緒並讓執行緒執行,同時讓Java虛擬機器呼叫run方法。
class MyThread extends Thread{private String name;MyThread(String name){this.name=name;}public void run(){for(int i=0;i<10;i++){system.out.println(name+" "+i);}}}class Threademo {public static void main(String[] args){ MyThread m1=new MyThread("王明"); MyThread m2=new MyThread("李陽"); m1.start(); m2.start();}}
呼叫run方法和start方法的區別: 呼叫run方法不開啟執行緒,呼叫start方法開啟執行緒並使得物件呼叫run方法。2.宣告實現runnable介面 2,1 定義類實現Runnable介面 2.2 覆蓋介面的Runnable的Run方法,將執行緒任務程式碼定義到run方法 2.3 建立Thread類的物件 2,4 將實現介面的子類物件作為引數傳給Thread的構造方法。 2.5 呼叫start方法啟動執行緒。
class demo implements Runnable{ private String name; demo(String name) { this.name=name; } public void run() { for(int i=0;i<10;i++) { system.out.println(name+" "+Thread.currentThread().getName()+" "+i); } } }class Threaddemo2{public static void main(Stirng[] args){ //建立demo子類的物件,非執行緒物件。 demo d=new demo(“demo”);//建立Thread類的物件,將runnable介面的物件作為引數傳給Thread的物件。 Thread t1=new Thread(d); Thread t2=new Thread(d);//將執行緒啟動 t1.start(); t2.start();
二.兩種方式比較好用? 1.實現介面的方式比較好,避免了單繼承的侷限性,較為常用。為什麼要傳引數:private Runnable target;Thread(Runnable target){this.target=target;}public void run(){if(target!=null){target.run();}}Runnable d =new demo;Thread t1=new Thread(d);執行緒任務已被封裝到Runnable介面的run方法中,run方法所屬於runnable子類物件,所以要將這個子類物件作為引數傳給Thread的建構函式,這樣,執行緒物件建立時可以明確執行緒任務。 2.繼承Runnable介面這種方式更符合面向物件思想。執行緒分為兩部分,一部分為執行緒物件,一部分為執行緒任務。繼承Thread類的方法將執行緒任務和執行緒物件耦合在一起。 三.後臺執行緒