執行緒學習
兩種方法建立執行緒,通常使用第二種方法更加靈活,主要是第二種方法適合多個相同程式的執行緒去處理同一資源的情況,即建立多個執行緒,傳入同乙個物件,就是對該物件同時用多個執行緒進行處理。
1. 建立thread類的物件就是建立了乙個執行緒,thread類中的run方法是空的,通常繼承thread類,覆蓋run方法:
thread tt = new mythread();
2. 使用runnable介面:thread類中有個帶引數的建構函式,引數是runnable物件。通常實現ru
nnable介面,覆蓋run方法。
thread tt = new thread(new subrunnable());//引數中傳入runnable介面實現類的物件。
後台執行緒:啟動之前呼叫tt.setdaemon(true);如果只有後台執行緒在執行,程序就會結束。
前台執行緒:預設或呼叫tt.setdaemon(false);前台執行緒沒結束程序就不會結束。
多執行緒同步問題:多個執行緒輪流執行,有可能乙個執行緒沒有昨完就做第二個執行緒,導致結果不對。
解決方法1:把程式放在同步語句塊中,只能有乙個執行緒進來,這種效能成為原子性。
synchronized(object)//(
程式變慢,因為總要判斷監視器,花銷變大)
object稱為監視器,可以是任意的物件,所有物件都有標誌位,為0或1,當為1時,繼續向下執行並且變為0;當為0時執行緒阻塞放入執行緒池中,直到變為1。
解決方法2:同步函式,把程式放在同步函式裡,同步物件是this
public synchronized void func()
死鎖問題
兩個執行緒佔著自己的資源鎖還要申請對方資源上的鎖,會導致程式停滯不前。
執行緒間的通訊:兩個執行緒間相互控制對方的啟動和暫停的方法
1. wait(); 是當前執行緒等待,直到其他執行緒進入同一監視器並呼叫notify()才繼續執行。
2. notify(); 喚醒同一監視器中等待著的執行緒
3. notifyall(); 喚醒同一物件監視器中所有等待著的執行緒,具有最高優先順序的執行緒首先被喚醒執行。
stop();suspend();停止執行緒,基本不用,因為容易發生死鎖。
通常想要停止執行緒,設定乙個flag,while(flag); 寫乙個停止自己的函式將flag改為false,在另乙個執行緒中呼叫該函式即可。
執行緒安全類:類中的方法是執行緒安全的,有同步的處理。
java中的執行緒
如何建立乙個控制單元或執行緒?第一種方式 1 繼承thread類。覆蓋run方法,將多執行緒要執行的 放到run方法中。2 呼叫start方法,開啟執行緒,並執行run方法。特性 隨機性 每次執行的結果不一樣,多個執行緒搶資源的結果 建立乙個thread類或其子類,才能夠產生乙個控制單元.第二種方式...
java中的多執行緒
package testthread 店員從生產者取貨,消費者從店員取貨,店員最多只能存放20個產品,當產品不夠20個需通知生產者生產,超過20個時停止消費 author passenger 店員類 class clerk catch interruptedexception e else 消費產品...
java中的多執行緒
建立執行緒的第一種方法 繼承thread類。步驟 1,定義乙個類繼承thread 2,複寫thread類中的run方法 目的 將自定義 儲存在run方法中,讓執行緒執行 3,呼叫執行緒的start方法,該方法用兩個作用 啟動執行緒,呼叫run方法 多執行緒的特性 隨機性 示例 class demo ...