1. 程式人生 > >執行緒知識點

執行緒知識點

一.如何建立執行緒?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類的方法將執行緒任務和執行緒物件耦合在一起。 三.後臺執行緒

: 守護執行緒,自動結束t2.setDaemon(boolean 型別的true或false)即為後臺執行緒。程序結束它即結束。 四.執行緒的狀態:阻塞狀態,具備CPU的執行權(執行狀態),不具備CPU的執行權,睡眠狀態,等待狀態 五.執行緒的優先順序:將getName變成tostring後 ,返回執行緒名稱,執行緒優先順序,執行緒組執行緒組(Thread group):通過Thread構造方法明確執行緒物件所屬的執行緒組。高優先順序執行先於低優先順序,10級的先於5級的。優先順序用數字表示,1到10表示。預設的優先順序為5級。最明顯的優先順序是1,5,10用setpriority設定優先順序。格式:setpriority(Thread.Maxpriority)主執行緒組是預設的。interrupt中斷執行緒。 六.執行緒睡眠 1.sleep方法和wait方法的異同 1.1 相同點:都處於凍結狀態 1.2 不同點:sleep方法必須指定時間,wait方法可指定時間也可不指定 時間 sleep是時間到了會臨時處於阻塞狀態,wait如果沒有指定時間,必須通過notify或 all notifyall喚醒。 sleep不一定必須定義在同步中,wait必須在同步中 都定義在同步中,執行緒執行到sleep不會釋放鎖,執行到wait會釋放鎖。 2.執行緒如何停止? 七.執行緒讓步 yield()方法執行緒臨時暫停。Thread.yield();執行緒臨時暫停。將執行權釋放,讓其他執行緒執行。