更新時間:2021-02-03 17:30:31 來源:動力節點 瀏覽1214次
多線程(multithreading)本身就是指從軟件或者硬件上實現多個線程并發執行的技術,在Java多線程編程的過程中會涉及到許多技術點,需要我們牢牢記住。本文我們就為大家總結了Java多線程并發技術要點,讓我們在學習Java多線程時少走彎路。
1、并發編程三要素
原子性:即一個不可再被分割的顆粒。在Java中原子性指的是一個或多個操作要么全部執行成功要么全部執行失敗。
有序性:程序執行的順序按照代碼的先后順序執行。(處理器可能會對指令進行重排序)
可見性:當多個線程訪問同一個變量時,如果其中一個線程對其作了修改,其他線程能立即獲取到最新的值。
2、線程的五大狀態
創建狀態:當用 new 操作符創建一個線程的時候
就緒狀態:調用 start 方法,處于就緒狀態的線程并不一定馬上就會執行 run 方法,還需要等待CPU的調度
運行狀態:CPU 開始調度線程,并開始執行 run 方法
阻塞狀態:線程的執行過程中由于一些原因進入阻塞狀態比如:調用 sleep 方法、嘗試去得到一個鎖等等
死亡狀態:run 方法執行完 或者 執行過程中遇到了一個異常
3、悲觀鎖與樂觀鎖
悲觀鎖:每次操作都會加鎖,會造成線程阻塞。
樂觀鎖:每次操作不加鎖而是假設沒有沖突而去完成某項操作,如果因為沖突失敗就重試,直到成功為止,不會造成線程阻塞。
4、線程之間的協作
線程間的協作有:wait/notify/notifyAll等
5、synchronized 關鍵字
synchronized是Java中的關鍵字,是一種同步鎖。它修飾的對象有以下幾種:
1)、修飾一個代碼塊:被修飾的代碼塊稱為同步語句塊,其作用的范圍是大括號{}括起來的代碼,作用的對象是調用這個代碼塊的對象
2)、修飾一個方法:被修飾的方法稱為同步方法,其作用的范圍是整個方法,作用的對象是調用這個方法的對象
3)、修改一個靜態的方法:其作用的范圍是整個靜態方法,作用的對象是這個類的所有對象
4)、修改一個類:其作用的范圍是synchronized后面括號括起來的部分,作用主的對象是這個類的所有對象。
6、CAS
CAS全稱是Compare And Swap,即比較替換,是實現并發應用到的一種技術。操作包含三個操作數—內存位置(V)、預期原值(A)和新值(B)。 如果內存位置的值與預期原值相匹配,那么處理器會自動將該位置值更新為新值 。否則,處理器不做任何操作。
CAS存在三大問題:ABA問題,循環時間長開銷大,以及只能保證一個共享變量的原子操作。
7、線程池
如果我們使用線程的時候就去創建一個線程,雖然簡單,但是存在很大的問題。如果并發線程數量很多,并且每個線程都是執行一個時間很短的任務就結束了,這樣頻繁創建線程就會大大降低系統的效率,因為頻繁創建線程和銷毀線程需要時間。線程池通過復用可以大大減少線程頻繁創建與銷毀帶來的性能上的損耗。
只要我們能夠掌握上述的Java多線程并發技術要點,學好Java多線程并發技術指日可待。當然,光靠這些要點還是遠遠不夠的,除了我們牢記多線程中的各種基礎概念,還要多進行實踐,在本站的多線程教程中就有關于多線程技術的許多知識要點和實例,我們只要付出努力,攻克多線程技術就在今朝!
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習