Java併發程式設計一

2021-08-20 00:14:10 字數 1885 閱讀 9127

不要用run()來開啟執行緒,它只會在當前執行緒中,序列執行run()方法中的**;建立執行緒時,推薦傳入runnable介面的例項,因為預設的thread.run()就是直接呼叫內部的runnable介面,這樣避免了過載thread.run(),因此使用runnable介面來告訴執行緒該做什麼更為合理。

public class threadsafe extends thread 

} }

public class threadsafe extends thread catch(interruptedexception e)}} 

}

public class threadsafe extends thread 

} }

public class threadsafe extends thread catch(interruptedexception e)}} 

}

1.等待執行緒結束join()方法,乙個執行緒的輸入依賴於另外乙個或者多個執行緒的輸出,此時需要等待依賴執行緒執行完畢才能繼續執行。join()方法有兩個實現:public final void join() throws interruptedexception—無限等待直到目標執行緒執行完畢;public final void join(long millis) throws interruptedexception—給出最大等待時間,如果超時則本執行緒繼續執行;**如下:

package com.luna.thread;

public class joinmain

} public static void main(string args) throws interruptedexception

}

主函式中如果不使用join()方法等待addthread,那麼i得到的很可能是0或者乙個非常小的數字。因為addthread換沒開始執行,i的值就已經被輸出了。join()的本質是讓呼叫執行緒wait在當前執行緒物件例項上。

2.thread.yield()會讓出當前執行緒的cpu,雖然讓出執行緒的cpu資源,但還是會進行cpu資源的搶奪。當乙個執行緒不那麼重要、或者優先順序較低時,且又害怕占用太多cpu資源,就可以在適當時候呼叫thread.yield()方法,給與其它重要執行緒更多的工作機會。

當多個執行緒競爭同一資源時,如果對資源的訪問順序敏感,就稱存在競態條件。導致競態條件發生的**區稱作臨界區。在臨界區中使用適當的同步就可以避免競態條件。臨界區實現方法有兩種,一種是用synchronized,一種是用lock顯式鎖實現。

併發修改:當乙個或多個執行緒正在遍歷乙個集合collection(arraylist,vector,hashmap,hashset),此時另乙個執行緒修改了這個集合的內容(新增、刪除或者修改),fail-fast機制在遍歷乙個集合時,當集合結構被修改,會丟擲concurrent modification exception。fail-fast迭代器在遍歷過程中是直接訪問內部資料的,因此內部的資料在遍歷的過程中無法被修改。為了保證不被修改,迭代器內部維護了乙個標記 「mode」 ,當集合結構改變(新增刪除或者修改),標記"mode"會被修改,而迭代器每次的hasnext()和next()方法都會檢查該"mode"是否被改變,當檢測到被修改時,丟擲concurrent modification exception。fail-safe(copyonwritearraylist,concurrenthashmap)任何對集合結構的修改都會在乙個複製的集合上進行修改,因此不會丟擲concurrentmodificationexception。fail-safe機制有兩個問題(1)需要複製集合,產生大量的無效物件,開銷大;(2)無法保證讀取的資料是目前原始資料結構中的資料。

java併發程式設計 一

加鎖機制 用鎖來保護狀態 對於可能被多個執行緒同時訪問的可變狀態變數,包括每個包含多個變數的不變形條件 在訪問它的時候都需要持有同乙個鎖,稱為被這個鎖保護 if vector.containers element 活躍性與效能 死鎖和顯示鎖 1.死鎖 定義 當乙個執行緒永遠占有乙個鎖,而其他執行緒嘗...

Java 併發程式設計 基礎 一

同步 和 非同步描述方法的呼叫。同步 方法呼叫一旦開始,呼叫者必須等到方法呼叫返回後,才能繼續後續的行為。序列的進行方法的呼叫。非同步方法呼叫更像乙個訊息傳遞,一旦方法呼叫就會立即返回。併發 多個任務交替執行。並行 多個cpu的系統上,多個cpu同時執行任務。用來表示公共資源或者公共資料。可以被多個...

學習java併發程式設計(一)

1 任務的認識 任務可以看作是乙個implements runnable的乙個類,任務的內容就是定義在run 方法中的內容 2 thread executor 當使用new thread runnable r start 時,即客戶端 也就是編寫程式的開發人員 直接在新執行緒中執行任務,而在使用ex...