資源描述:
《java(并發(fā)編程)多線程入門到精通[張振華.jack]》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、自我介紹Java多線程從入門到精通------Java并發(fā)編程詳解張振華.JackQQ:494460705Mail:zhangzhenhua846@126.com2015年6月10年Java開發(fā)1張振華.Jack目錄I.JAVA-Thread概念I(lǐng)I.Thread的三種實(shí)現(xiàn)方法III.生命周期IV.安全和鎖V.Concurrent包(安全集合類、安全Queue)VI.線程阻塞機(jī)制VII.線程池詳解(原理,實(shí)際使用)VIII.線程的監(jiān)控,分析方法IX.擴(kuò)展數(shù)據(jù)庫(kù)連接池2張振華.Jack概念A(yù).什么是進(jìn)程A.是資源
2、分配的最小單位;(資源,包括各種表格、內(nèi)存空間、磁盤空間)B.同一進(jìn)程中的多條線程將共享該進(jìn)程中的全部系統(tǒng)資源B.什么是線程A.線程只由相關(guān)堆棧(系統(tǒng)棧或用戶棧)寄存器和線程控制表TCB組成。寄存器可被用來(lái)存儲(chǔ)線程內(nèi)的局部變量B.線程是CPU調(diào)度的最小單位C.什么是并行和并發(fā)A.并行運(yùn)行:總線程數(shù)<=CPU數(shù)量*核心數(shù):B.并發(fā)運(yùn)行:總線程數(shù)>CPU數(shù)量*核心數(shù):(時(shí)間片輪轉(zhuǎn)進(jìn)程調(diào)度算法)3張振華.JackThread的三種實(shí)現(xiàn)方法4張振華.Jack線程的生命周期/常用方法獲得當(dāng)前線程的副本:Threadcur
3、rent=Thread.currentThread();例如多線程上傳的文件的進(jìn)度條可以使用5張振華.Jack何為安全?什么是安全的?先問個(gè)問題?是不是不加鎖就不是線程安全的,個(gè)人感覺只要你代碼里面沒有變量互串,線程之間互不影響,例如server的設(shè)計(jì)方法;?非單例代碼也是安全的,注意只有單例模式下才會(huì)有鎖的問題6張振華.Jack鎖一.隱式鎖:synchronized(同一個(gè)對(duì)象鎖下面的,synchronized區(qū)域是互斥的)二.方法鎖(默認(rèn)是當(dāng)前對(duì)象的鎖)三.代碼快鎖(性能高于方法鎖,可以指定哪個(gè)對(duì)象的鎖)四
4、.顯示鎖:java.util.concurrent.lock(需要手動(dòng)關(guān)/開),注意自己的代碼邏輯不要產(chǎn)生死鎖了五.關(guān)鍵字:volatile(線程在每次使用變量的時(shí)候,都會(huì)讀取變量修改后的最的值)六.其實(shí)是有風(fēng)險(xiǎn)的,并行情況下不一定正確,有可能兩個(gè)線程同時(shí)取到最后修改的值七.原子操作:java.util.concurrent.atomic(AtomicBoolean,AtomicLong,AtomicInteger等一些類庫(kù))八.(如果查看源碼的話,實(shí)現(xiàn)原理是volatile,相對(duì)安全的,個(gè)人覺得不絕對(duì))7張振
5、華.Jack問一個(gè)問題,請(qǐng)看以下下面的鎖有用嗎8張振華.Jack?這種鎖是沒有用的啊,因?yàn)閟ynchronized的對(duì)象不一樣9張振華.Jack常用的Concurrent線程安全類庫(kù)?java.util.concurrent.ConcurrentHashMap?java.util.concurrent.ConcurrentLinkedQueue?java.util.concurrent.ConcurrentMap?java.util.concurrent.ConcurrentNavigableMap?java.
6、util.concurrent.ConcurrentSkipListMap?java.util.concurrent.ConcurrentSkipListSet?實(shí)現(xiàn)原理和算法類似lock的10張振華.Jack安全線程阻塞隊(duì)列(1)java.util.concurrent.BlockingQueue?BlockingQueue很好的解決了多線程中高效安全“傳輸”數(shù)據(jù)的問題;?基于java.util.Queue的基礎(chǔ)上做了一些線程安全的封裝;(對(duì)以下方法做了一些的擴(kuò)展和封裝)11張振安全線程阻塞隊(duì)列(2)Bloc
7、kingQueue常用的兒子?1.ArrayBlockingQueue基于數(shù)組的阻塞隊(duì)列實(shí)現(xiàn),在ArrayBlockingQueue內(nèi)部,維護(hù)了一個(gè)定長(zhǎng)數(shù)組,以便緩存隊(duì)列中的數(shù)據(jù)對(duì)象,這是一個(gè)常用的阻塞隊(duì)列,除了一個(gè)定長(zhǎng)數(shù)組外,ArrayBlockingQueue內(nèi)部還保存著兩個(gè)整形變量,分別標(biāo)識(shí)著隊(duì)列的頭部和尾部在數(shù)組中的位置;?2.LinkedBlockingQueue基于鏈表的阻塞隊(duì)列,同ArrayListBlockingQueue類似,其內(nèi)部也維持著一個(gè)數(shù)據(jù)緩沖隊(duì)列(該隊(duì)列由一個(gè)鏈表構(gòu)成)?3.Dela
8、yQueueDelayQueue中的元素只有當(dāng)其指定的延遲時(shí)間到了,才能夠從隊(duì)列中獲取到該元素。DelayQueue是一個(gè)沒有大小限制的隊(duì)列,因此往隊(duì)列中插入數(shù)據(jù)的操作(生產(chǎn)者)永遠(yuǎn)不會(huì)被阻塞,而只有獲取數(shù)據(jù)的操作(消費(fèi)者)才會(huì)被阻塞。使用場(chǎng)景:DelayQueue使用場(chǎng)景較少,但都相當(dāng)巧妙,常見的例子比如使用一個(gè)DelayQueue來(lái)管理一個(gè)超時(shí)未響應(yīng)的連接隊(duì)列。?4.Priorit