java併發與執行緒
建立執行緒有哪些方式?
1.繼承Thread類,重寫run方法 2.實現Runnable介面,並將物件例項作為引數給Thread類的構造方法 3實現callable介面,實現call方法
Vector相當於一個執行緒安全的List
HashMap是非執行緒安全的,其對應的執行緒安全類是HashTable
Arraylist是非執行緒安全的,其對應的執行緒安全類是Vector
StringBuffer是執行緒安全的,相當於一個執行緒安全的StringBuilder
E,Properties實現了Map介面,是執行緒安全的
CopyOnWriteArrayList適合使用在讀操作遠遠大於寫操作的場景裡,比如快取。
ReadWriteLock 當寫操作時,其他執行緒無法讀取或寫入資料,而當讀操作時,其它執行緒無法寫入資料,但卻可以讀取資料 。適用於 讀取遠遠大於寫入的操作。
ConcurrentHashMap是一個執行緒安全的Hash Table,它的主要功能是提供了一組和HashTable功能相同但是執行緒安全的方法。ConcurrentHashMap可以做到讀取資料不加鎖,並且其內部的結構可以讓其在進行寫操作的時候能夠將鎖的粒度保持地儘量地小,不用對整個ConcurrentHashMap加鎖。
start和run
兩種方法的區別:
1.start方法
用 start方法來啟動執行緒,是真正實現了多執行緒, 通過呼叫Thread類的start()方法來啟動一個執行緒,這時此執行緒處於就緒(可執行)狀態,並沒有執行,一旦得到cpu時間片,就開始執行run()方法。但要注意的是,此時無需等待run()方法執行完畢,即可繼續執行下面的程式碼。所以run()方法並沒有實現多執行緒。
2.run方法
run()方法只是類的一個普通方法而已,如果直接呼叫Run方法,程式中依然只有主執行緒這一個執行緒,其程式執行路徑還是隻有一條,還是要順序執行,還是要等待run方法體執行完畢後才可繼續執行下面的程式碼。
第一,記住wait必須要進行異常捕獲
第二,記住呼叫wait或者notify方法必須採用當前鎖呼叫,即必須採用synchronized中的物件
執行緒區域性儲存技術:
同一全域性變數或者靜態變數每個執行緒訪問的是同一變數,多個執行緒同時訪存同一全域性變數或者靜態變數時會導致衝突,尤其是多個執行緒同時需要修改這一變數時,通過TLS機制,為每一個使用該全域性變數的執行緒都提供一個變數值的副本,每一個執行緒均可以獨立地改變自己的副本,而不會和其它執行緒的副本衝突。
synchronized關鍵字是同步程式碼塊關鍵字,對物件加互斥鎖
volatile:用來確保將變數的跟新操作通知到其他執行緒,當把變數宣告為volatile型別後,編譯器與執行時都會注意到這個變數是共享的,因此不會將該變數上的操作與其他記憶體操作一起重排序。然而,在訪問volatile變數時不會執行加鎖操作,因此也就不會使執行執行緒阻塞,因此volatile變數是一種比 synchronized關鍵字更輕量級的同步機制。
sleep和wait的區別有:
1,這兩個方法來自不同的類分別是Thread和Object
2,最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得敏感詞執行緒可以使用同步控制塊或者方法。
3,wait,notify和notifyAll只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4,sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常
相關文章
- java多執行緒與併發 - 併發工具類Java執行緒
- Java併發實戰一:執行緒與執行緒安全Java執行緒
- java多執行緒與併發 - 執行緒池詳解Java執行緒
- Java併發指南1:併發基礎與Java多執行緒Java執行緒
- JAVA多執行緒併發Java執行緒
- Java多執行緒/併發06、執行緒鎖Lock與ReadWriteLockJava執行緒
- Java併發(四)----執行緒執行原理Java執行緒
- Java併發(一)----程式、執行緒、並行、併發Java執行緒並行
- Java多執行緒與併發之ThreadLocalJava執行緒thread
- Java高併發與多執行緒(一)-----概念Java執行緒
- Java多執行緒與併發 - 瞭解“monitor”Java執行緒
- Java高併發與多執行緒(二)-----執行緒的實現方式Java執行緒
- 【JAVA併發第二篇】Java執行緒的建立與執行,執行緒狀態與常用方法Java執行緒
- Java併發系列 — 執行緒池Java執行緒
- java 多執行緒 併發 面試Java執行緒面試
- 多執行緒與高併發(二)執行緒安全執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- Java 併發和多執行緒(一) Java併發性和多執行緒介紹[轉]Java執行緒
- 10、Java併發性和多執行緒-執行緒安全與不可變性Java執行緒
- Java 併發:執行緒、執行緒池和執行器全面教程Java執行緒
- Java多執行緒與併發基礎面試題Java執行緒面試題
- java多執行緒與併發 - Condition(條件)Java執行緒
- Java多執行緒/併發08、中斷執行緒 interrupt()Java執行緒
- Java併發程式設計:Java執行緒Java程式設計執行緒
- Java執行緒新特徵——Java併發庫Java執行緒特徵
- [Java併發]執行緒的並行等待Java執行緒並行
- Java8 新特性併發篇(一) | 執行緒與執行器Java執行緒
- Java執行緒與併發程式設計實踐----額外的執行緒能力Java執行緒程式設計
- 【多執行緒與高併發】- 執行緒基礎與狀態執行緒
- Java執行緒的併發工具類Java執行緒
- Java併發——執行緒池ThreadPoolExecutorJava執行緒thread
- Java併發(十六)----執行緒八鎖Java執行緒
- Java併發和多執行緒:序Java執行緒
- 【多執行緒與高併發】Java守護執行緒是什麼?什麼是Java的守護執行緒?執行緒Java
- Java核心(三)併發中的執行緒同步與鎖Java執行緒
- 啃碎併發(六):Java執行緒同步與實現Java執行緒
- 啃碎併發(一):Java執行緒總述與概念Java執行緒
- 併發與多執行緒基礎執行緒