這篇文章主要介紹“Java并發的相關知識點有哪些”,在日常操作中,相信很多人在Java并發的相關知識點有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java并發的相關知識點有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1、用并發解決的問題大體上可以分為“速度”和“設計可管理性”兩種。
2、并發通常是提高運行在單處理器上的程序的性能。
這聽起來有些違背直覺。如果你仔細考慮一下就會發現,在單處理器上運行的并發程序開銷確實應該比該程序的所有部分都順序執行的開銷大,因為其中增加了所謂上下文切換的代價(從一個任務切換到另一個任務)。
使這個問題變得有些不同的是阻塞。如果程序中的某個任務因為該線程控制之外的某些條件(通常是I/O)而導致不能繼續執行,那么我們就說這個任務或線程阻塞了。如果沒有并發,則整個程序都將停止下來,直至外部條件發生變化。但是如果使用并發來編寫
程序,那么當一個任務阻塞時,程序中的其他任務還能繼續執行,因此這個程序可以保持繼續向前執行。事實上,從性能的角度看,如果沒有任務會阻塞,那么在單處理器機器上使用并發就沒有任何意義。
3、實現并發最直接的方式是在操作系統級別使用進程。進程是運行在它自己的地址空間內的自包容的程序。
4、操作系統通常會將進程互相隔離開,因此他們不會彼此干涉,這使得用進程編程相對容易一些。與此相反的是,像Java所使用的這種并發系統會共享諸如內存和I/O這樣的資源,因此編寫多線程程序最基本的困難在于在協調不同線程驅動的任務之間的對這些資
源的使用,以使得這些資源不會同時被多個任務訪問。
5、Java的線程機制是搶占式的,這表示調度機制會周期性的中斷線程,將上下文切換到另一個線程,從而為每個線程都提供時間片,使得每個線程都會分配到數量合理的的時間去驅動它的任務。
6、一個線程就是在進程中的一個單一的順序控制流,因此,單個進程可以擁有多個并發執行的任務。
知識點擴展
發布:一個對象是使它能夠被當前范圍之外的代碼所引用:
常見形式:將對象的的引用存儲到公共靜態域;非私有方法中返回引用;發布內部類實例,包含引用。
逃逸:在對象尚未準備好時就將其發布。
不要讓this引用在構造函數中逸出。例,在構造函數中啟動線程,線程會包含對象的引用。
同步容器:對容器的所有狀態進行穿行訪問,Vector、Hashtable,Cllections.synchronizedMap|List
并發容器:ConcurrentHashMap,CopyOnWriteArrayList,ConcurrentLinkedQueue、BlockingQueue
list 隨機訪問特性的優勢。
Blocking 增加了可阻塞的get set操作
ConcurrentHashMap:分離鎖,為并發訪問帶來的高的吞吐量,同時幾乎沒有損失單個線程的訪問性能。返回弱一致性的迭代器。
迭代器的弱一致性,在迭代器生成以后會檢測容器的修改變化。
并發容器 size(), isEmpty() 弱化,返回近似結果。
CopyOnWriteArrayList:每次修改容器時復制,適用迭代需求大于修改需求情況。
生產者消費者模式,運用有界阻塞隊列解耦生產者和消費者的代碼。
Executor任務執行框架,實現了生產者消費者模式。
SynchronousQueue:put等待消費者可用,take等待生產者可用,適用于消費者充足的情景。
到此,關于“Java并發的相關知識點有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。