多線程并發(fā)

線程聲明

  • implements Runable -> run
public class myRunable implements Runnable{
        @Override
        public void run() {
            // TODO do some thread things
        }   
}
  • implements Callable -> call

有返回值善绎,通過(guò)FutureTask封裝后注入Thread中執(zhí)行俺猿,可異步獲取執(zhí)行結(jié)果

    public class myCallable implements Callable<Integer>{

        @Override
        public Integer call() throws Exception {
            // TODO do some thread things
            return null;
        }
        
    }
  • extends Thread -> run

線程池Excutor

  • cachedThreadPool

一個(gè)任務(wù)創(chuàng)建一個(gè)線程

  • fixedThreadPool

固定線程數(shù)量

  • singleThreadPool

固定1個(gè)線程

線程調(diào)度操作方法

  • sleep()

阻塞線程然低,繼續(xù)持有鎖和資源,設(shè)置時(shí)間后會(huì)自動(dòng)繼續(xù)行施、

  • wait()

阻塞線程叶骨,放棄鎖和資源進(jìn)入等待喚醒隊(duì)列

  • notify()

通知喚醒隊(duì)列內(nèi)某個(gè)線程掛起

  • notifyAll()

通知喚醒隊(duì)列內(nèi)所有線程掛機(jī),準(zhǔn)備競(jìng)爭(zhēng)鎖

  • yield()

降權(quán)

  • join()

阻塞線程姓言,當(dāng)前線程阻塞瞬项,執(zhí)行join線程內(nèi)容蔗蹋,join線程執(zhí)行結(jié)束繼續(xù)執(zhí)行當(dāng)前線程

  • deamon

非主線程

  • condition

依賴Lock何荚,使用Lock時(shí),方法wait猪杭,signal餐塘,signalAll代替OBJ的wait,notify皂吮,notifyAll

協(xié)作戒傻,通信,鎖

  • 通信
  • 阻塞同步
    假如A和B同時(shí)競(jìng)爭(zhēng)對(duì)象O鎖蜂筹,A先獲取了鎖
    • synchronized

對(duì)象B會(huì)一直等待A釋放鎖需纳,適合競(jìng)爭(zhēng)不是很多的情況,且java自身會(huì)對(duì)sync優(yōu)化艺挪。依賴于JVM實(shí)現(xiàn)

  • ReentrantLock(lock)

對(duì)象B會(huì)等待一定時(shí)間后不翩,中斷等待干其他事情,適合競(jìng)爭(zhēng)多的情況麻裳,同步操作有更多的操作方法口蝠。JDK實(shí)現(xiàn),自旋鎖實(shí)現(xiàn)津坑,使用了CAS
a) lock(), 如果獲取了鎖立即返回妙蔗,如果別的線程持有鎖,當(dāng)前線程則一直處于休眠狀態(tài)疆瑰,直到獲取鎖
b) tryLock(), 如果獲取了鎖立即返回true眉反,如果別的線程正持有鎖,立即返回false穆役;
c)tryLock(long timeout,TimeUnit unit)寸五, 如果獲取了鎖定立即返回true,如果別的線程正持有鎖孵睬,會(huì)等待參數(shù)給定的時(shí)間播歼,在等待的過(guò)程中,如果獲取了鎖定掰读,就返回true秘狞,如果等待超時(shí),返回false蹈集;
d) lockInterruptibly:如果獲取了鎖定立即返回烁试,如果沒(méi)有獲取鎖定,當(dāng)前線程處于休眠狀態(tài)拢肆,直到或者鎖定减响,或者當(dāng)前線程被別的線程中斷

  • 自旋

由于鎖的操作需要用戶態(tài)-核心態(tài)的轉(zhuǎn)換消耗靖诗,對(duì)于鎖控制時(shí)間短的,下一個(gè)線程自己等待一下鎖釋放支示,就減少了狀態(tài)轉(zhuǎn)換消耗

  • 樂(lè)觀 CAS
  • 偏向

第一次執(zhí)行CAS刊橘,然后給該線程標(biāo)記,以后若沒(méi)有競(jìng)爭(zhēng)則該線程一直將鎖消除

  • 死鎖

死鎖產(chǎn)生的四個(gè)必要條件
互斥條件:資源是獨(dú)占的且排他使用颂鸿,進(jìn)程互斥使用資源促绵,即任意時(shí)刻一個(gè)資源只能給一個(gè)進(jìn)程使用,其他進(jìn)程若申請(qǐng)一個(gè)資源嘴纺,而該資源被另一進(jìn)程占有時(shí)败晴,則申請(qǐng)者等待直到資源被占有者釋放。
不可剝奪條件:進(jìn)程所獲得的資源在未使用完畢之前栽渴,不被其他進(jìn)程強(qiáng)行剝奪尖坤,而只能由獲得該資源的進(jìn)程資源釋放。
請(qǐng)求和保持條件:進(jìn)程每次申請(qǐng)它所需要的一部分資源闲擦,在申請(qǐng)新的資源的同時(shí)慢味,繼續(xù)占用已分配到的資源。
循環(huán)等待條件:在發(fā)生死鎖時(shí)必然存在一個(gè)進(jìn)程等待隊(duì)列{P1,P2,…,Pn},其中P1等待P2占有的資源佛致,P2等待P3占有的資源贮缕,…,Pn等待P1占有的資源俺榆,形成一個(gè)進(jìn)程等待環(huán)路感昼,環(huán)路中每一個(gè)進(jìn)程所占有的資源同時(shí)被另一個(gè)申請(qǐng),也就是前一個(gè)進(jìn)程占有后一個(gè)進(jìn)程所深情地資源罐脊。
解決死鎖
一是死鎖預(yù)防定嗓,就是不讓上面的四個(gè)條件同時(shí)成立。
二是萍桌,合理分配資源宵溅。
三是使用銀行家算法,如果該進(jìn)程請(qǐng)求的資源操作系統(tǒng)剩余量可以滿足上炎,那么就分配

AtomicXXXX

CAS操作完成原子性

CopyOnWriteXXX

先復(fù)制一份副本恃逻,在副本中進(jìn)行操作,其ADD是經(jīng)過(guò)lock鎖的藕施,操作完成寇损,將原地址指向改為副本地址指向,完成對(duì)數(shù)組的安全操作裳食。內(nèi)存消耗高矛市,實(shí)時(shí)性低。復(fù)制的目的是進(jìn)行讀寫分離诲祸,寫操作不影響原數(shù)據(jù)讀浊吏。讀不加鎖而昨。適合讀多寫少的需求。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末找田,一起剝皮案震驚了整個(gè)濱河市歌憨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌午阵,老刑警劉巖躺孝,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異底桂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)惧眠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門籽懦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人氛魁,你說(shuō)我怎么就攤上這事暮顺。” “怎么了秀存?”我有些...
    開(kāi)封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵捶码,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我或链,道長(zhǎng)惫恼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任澳盐,我火速辦了婚禮祈纯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叼耙。我一直安慰自己腕窥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布筛婉。 她就那樣靜靜地躺著簇爆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爽撒。 梳的紋絲不亂的頭發(fā)上入蛆,一...
    開(kāi)封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音匆浙,去河邊找鬼安寺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛首尼,可吹牛的內(nèi)容都是我干的挑庶。 我是一名探鬼主播言秸,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼迎捺!你這毒婦竟也來(lái)了举畸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凳枝,失蹤者是張志新(化名)和其女友劉穎抄沮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體岖瑰,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叛买,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蹋订。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片率挣。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖露戒,靈堂內(nèi)的尸體忽然破棺而出椒功,到底是詐尸還是另有隱情,我是刑警寧澤智什,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布动漾,位于F島的核電站,受9級(jí)特大地震影響荠锭,放射性物質(zhì)發(fā)生泄漏旱眯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一节沦、第九天 我趴在偏房一處隱蔽的房頂上張望键思。 院中可真熱鬧,春花似錦甫贯、人聲如沸吼鳞。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赔桌。三九已至,卻和暖如春渴逻,著一層夾襖步出監(jiān)牢的瞬間疾党,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工惨奕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雪位,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓梨撞,卻偏偏與公主長(zhǎng)得像雹洗,于是被迫代替她去往敵國(guó)和親香罐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Java-Review-Note——4.多線程 標(biāo)簽: JavaStudy PS:本來(lái)是分開(kāi)三篇的时肿,后來(lái)想想還是整...
    coder_pig閱讀 1,653評(píng)論 2 17
  • CoordinatorLayout(協(xié)調(diào)布局) 簡(jiǎn)介:是組織它眾多子view之間互相協(xié)作的一個(gè)ViewGroup庇茫。...
    jadefly閱讀 123評(píng)論 0 0
  • 藍(lán) 天 那天,是很久以前螃成,我旦签,就這么跟你對(duì)峙。 三月寸宏,成就你溫順的性格宁炫,我站在谷場(chǎng)上看,四周有墨綠融進(jìn)你的眼睛击吱,伸...
    二姥爺沒(méi)有春天閱讀 264評(píng)論 0 0
  • 文信侯呂不韋 呂不韋淋淀,一個(gè)可以算上幫組嬴政的人,因?yàn)樗麕椭速陌职指泊迹f襄王子楚,當(dāng)時(shí)子楚被當(dāng)成秦...
    凱旋城閱讀 153評(píng)論 1 1
  • 沒(méi)什么特別的愛(ài)好炭臭。沒(méi)什么特別的能力永脓。沒(méi)什么特別的與眾不同。 沒(méi)堅(jiān)持沒(méi)卓識(shí)遠(yuǎn)見(jiàn)沒(méi)寫東西的情緒
    豬貓比巴卜閱讀 242評(píng)論 3 0