併發背後的故事

併發的背後故事:
併發:程序同時處理多個任務的能力。
併發編程的根源在於對多任務狀況下對資源訪問的有效控制。
程序、進程、線程:
程序是靜態的概念,windows下一般指exe文件,java中程序是一個war包或者jar包。
進程是動態的概念,是程序在運行狀態,進程說明程序在內存中的邊界。
線程是進程內的一個基本任務,每一個線程都有本身的功能,是CPU分配與調度的基本單元。
併發與並行:
並行:多核CPU
併發:CPU時間片:同一時間只有一個線程在運行。
同步和異步:
同步:
異步:
臨界區:
臨界區用來表示一種公共資源與共享數據,能夠被多個線程使用。
同一時間只能有一個線程訪問臨界區(阻塞狀態),其餘資源必須等待。
死鎖、飢餓、活鎖:
線程安全:
在擁有共享數據的多條線程並行執行的程序中,線程安全的代碼會經過同步機制保證各個線程均可以正常且正確的執行,不會出現數據污染等意外狀況。java

線程安全的三大特性:
原子性:
即一個操做或者多個操做要麼所有執行而且執行的過程不會被任何因素打斷,要麼都不執行。i=i+1(不是原子性)
可見性:
當多個線程訪問一個變量時,一個線程修改了這個變量的值,其餘線程可以當即看到修改後的值。
有序性:若是在當前線程內觀察,全部的操做都是有序的,若是在一個線程觀察另外一個線程,全部的線程都是無序的。
java內存模型:
java memory model
棧:Stack
每一個線程建立一個棧
存儲執行方法的執行信息
線程私有,沒法共享
先進後出,後進先出
連續存儲,執行效率高編程

堆:Heap
用於存儲對象
JVM全局惟一
堆不是連續的
執行效率低
全部線程共享windows

方法區:靜態區
類結構信息
靜態變量static
靜態方法
存儲內容不變
存儲字符串緩存

java中建立線程的三種方式:
繼承Thtread類
實現Runable接口
使用Callable和Future安全

建立線程的三種方式對比:
繼承Thtread類 優勢:服務器

多線程的同步機制:
synchronized(同步鎖)關鍵字的做用就是利用一個特定的對象設置一個鎖lock(繡球),在多線程(遊客)併發訪問的時候,同時只容許一個線程(遊客)能夠得到這個鎖,執行特定的代碼(迎娶新娘)。執行後釋放鎖,繼續由其餘線程爭搶。
synchornized的使用場景:
synchornized代碼塊,對於任意對象
synchornized方法,對於this當前對象
synchornized靜態方法,對於該類的字節碼對象多線程

線程的五種狀態:
新建new
就緒ready
運行中runing
阻塞blocked
死亡:dead併發

死鎖產生的緣由:
死鎖是在多線程狀況下最嚴重的問題,在多線程對公共資源(文件、數據)等進行操做時,彼此不釋放本身所佔用的公共資源,而去試圖操做其餘線程的資源,而造成交叉引用,就會產生死鎖。
解決死鎖最根本的建議:
儘可能減小對公共資源的引用,用完立刻釋放
減小使用synchd,採用副本方式替代。異步

線程(不)安全的類:
線程安全:Vector Properties StringBuffer HashTable
線程不安全:ArrayList/LinkedList HashSet/TreeSet StringBuilder HashMap工具

java.util.concurrent
併發伴隨着多核處理器的誕生而產生的,爲了充分利用硬件資源,誕生了多線程技術。可是多線程又存在資源競爭的問題,引起了同步和互斥的問題,JDK1.5推出的java.util.concurrent併發工具包來解決這些問題。

ThreadPool線程池
重用存在的線程,減小對象、消亡的開銷
線程總數可控,提升資源的利用率
避免過多資源競爭,避免阻塞
提升額外功能、定時執行、按期執行、監控等。

new Thread的弊端
新建對象,性能差
線程缺少統一管理,可能無限制的建立線程,相互競爭,嚴重時會佔用過多的系統資源致使宕機或OOM內存溢出。

線程池的種類:
CachedThreadPool:可緩存線程池
FixedThreadPool:定長線程池
SingleThreadPool:單線程池
ScheduledThreadPool:調度線程池

CountDownLatch-倒計時鎖
CountDownLatch-倒計時鎖特別適合「總-分任務」例如多線程計算後的數據彙總
CountDownLatch類位於java.uitl.concurrent包下,利用它能夠實現相似計數器的功能。

Semphore信號量
對不起服務器已滿,請稍後再試!

 

重入鎖:指任意線程在獲取到鎖以後,再次獲取該鎖而不會被該鎖所阻塞ReentrantLock設計目的是用來代替synchronized關鍵字

相關文章
相關標籤/搜索