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