JUC
一、什么是JUC
在Java 5.0 提供了java.util.concurrent(簡(jiǎn)稱JUC )包,在此包中增加了在并發(fā)編程中很常用的實(shí)用工具類,用于定義類似于線程的自定義子系統(tǒng),包括線程池、異步IO 和輕量級(jí)任務(wù)框架。提供可調(diào)的、靈活的線程池。還提供了設(shè)計(jì)用于多線程上下文中Collection 實(shí)現(xiàn)等。
二、進(jìn)程和線程
1.進(jìn)程與線程(QQ音樂(lè)(這是一個(gè)進(jìn)程)與評(píng)論+播放歌曲(這是兩個(gè)線程))
- 進(jìn)程:進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。它是操作系統(tǒng)動(dòng)態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進(jìn)程既是基本的分配單元,也是基本的執(zhí)行單元。
- 線程:通常在一個(gè)進(jìn)程中可以包含若干個(gè)線程,當(dāng)然一個(gè)進(jìn)程中至少有一個(gè)線程,不然沒(méi)有存在的意義。線程可以利用進(jìn)程所擁有的資源,在引入線程的操作系統(tǒng)中,通常都是把進(jìn)程作為分配資源的基本單位,而把線程作為獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位,由于線程比進(jìn)程更小,基本上不擁有系統(tǒng)資源,故對(duì)它的調(diào)度所付出的開(kāi)銷就會(huì)小得多,能更高效的提高系統(tǒng)多個(gè)程序間并發(fā)執(zhí)行的程度。
2.線程的狀態(tài)
- wait狀態(tài)和block狀態(tài)的區(qū)別
WAITING狀態(tài)
當(dāng)前線程調(diào)用object.wait方法后,釋放對(duì)象鎖,這個(gè)狀態(tài)就是WAITING狀態(tài),線程處于等待隊(duì)列,等待其他線程同一個(gè)對(duì)象調(diào)用notify或者notifyAll方法。
BLOCKED狀態(tài)
在調(diào)用notify或者notifyAll方法后,調(diào)用wait的等待線程不會(huì)立刻從等待隊(duì)列返回,而是從等待隊(duì)列移動(dòng)到同步隊(duì)列,準(zhǔn)備競(jìng)爭(zhēng)對(duì)象監(jiān)視器的這種狀態(tài)就是BLOCKED,換句話說(shuō)就是如果同時(shí)有不止一個(gè)線程競(jìng)爭(zhēng)對(duì)象監(jiān)視器,那么這種狀態(tài)就是對(duì)象監(jiān)視器。
也就是說(shuō)只有synchronized會(huì)導(dǎo)致線程進(jìn)入Blocked狀態(tài),Waiting狀態(tài)只能進(jìn)入Blocked狀態(tài),獲取鎖之后才能恢復(fù)執(zhí)行。
3.等待隊(duì)列
調(diào)用obj的wait(), notify()方法前,必須獲得obj鎖,也就是必須寫(xiě)在synchronized(obj) 代碼段內(nèi)。 1.線程1獲取對(duì)象A的鎖,正在使用對(duì)象A。 2.線程1調(diào)用對(duì)象A的wait()方法。 3.線程1釋放對(duì)象A的鎖,并馬上進(jìn)入等待隊(duì)列。 4.鎖池里面的對(duì)象爭(zhēng)搶對(duì)象A的鎖。 5.線程5獲得對(duì)象A的鎖,進(jìn)入synchronized塊,使用對(duì)象A。 6.線程5調(diào)用對(duì)象A的notifyAll()方法,喚醒所有線程,所有線程進(jìn)入同步隊(duì)列。若線程5調(diào)用對(duì)象A的notify()方法, 則喚醒一個(gè)線程,不知道會(huì)喚醒誰(shuí),被喚醒的那個(gè)線程進(jìn)入同步隊(duì)列。 7.notifyAll()方法所在synchronized結(jié)束,線程5釋放對(duì)象A的鎖。 8.同步隊(duì)列的線程爭(zhēng)搶對(duì)象鎖,但線程1什么時(shí)候能搶到就不知道了。三、并行和并發(fā)
并發(fā):同一時(shí)刻多個(gè)線程在訪問(wèn)同一個(gè)資源,多個(gè)線程對(duì)一個(gè)點(diǎn)(搶票)
并行:多項(xiàng)工作一起執(zhí)行,之后再匯總(例子:泡方便面,電水壺?zé)?#xff09;
本文轉(zhuǎn)載
總結(jié)
- 上一篇: Java8新特性之函数式接口
- 下一篇: 互联网日报 | 7月8日 星期四 | 小