Java多執行緒一些基礎知識
阿新 • • 發佈:2018-12-13
最近複習了一些多執行緒方面的基礎知識,做一下總結,多以自己的理解來文字敘述,如果有漏點或者理解錯的地方,歡迎各位大佬多多指出;
ps:執行緒分為使用者執行緒和守護執行緒,當程式中的所有的使用者執行緒都執行完了之後,JVM就退出執行了,下面所講的都是使用者執行緒為例,我們一般建立一個新執行緒物件,預設都是使用者執行緒,當然,我們可以手動呼叫setDeamon(true);置為守護執行緒;這個涉及到執行緒優先順序的問題了,後面會詳細說明;
執行緒的生命週期:
1. 新建狀態(New) : 執行緒物件被建立後,就進入了新建狀態。例如,Thread thread = new Thread()。2. 就緒狀態(Runnable)
實現多執行緒的方式有兩種:繼承Thread類和實現Runnable介面,繼承和實現各有各的特點,怎麼選擇可根據業務來決定,一般為了更好的擴充套件都是選擇實現Runnable介面;
// 實現Runnable的方式 class MyThread implements Runnable{ private int ticket=10; public void run(){ for(int i=0;i<20;i++){ if(this.ticket>0){ System.out.println(Thread.currentThread().getName()+" 賣票:ticket"+this.ticket--); } } } }; public class RunnableTest { public static void main(String[] args) { MyThread mt=new MyThread(); // 啟動3個執行緒t1,t2,t3(它們共用一個Runnable物件),這3個執行緒一共賣10張票! Thread t1=new Thread(mt); Thread t2=new Thread(mt); Thread t3=new Thread(mt); t1.start(); t2.start(); t3.start(); } }
// 繼承Thread類的方式 class MyThread extends Thread{ private int ticket=10; public void run(){ for(int i=0;i<20;i++){ if(this.ticket>0){ System.out.println(this.getName()+" 賣票:ticket"+this.ticket--); } } } }; public class ThreadTest { public static void main(String[] args) { // 啟動3個執行緒t1,t2,t3;每個執行緒各賣10張票! MyThread t1=new MyThread(); MyThread t2=new MyThread(); MyThread t3=new MyThread(); t1.start(); t2.start(); t3.start(); } }
其中如果是選擇繼承Thread類的方式的話,因為每new一個執行緒物件,都會產生一個獨立的物件,所以每個物件都會執行10次迴圈;
實現runnable介面,三個執行緒共享一個MyThread物件,所以3個執行緒一共執行10次迴圈;