20170716-0717 Java線程

參考文獻(xiàn):《Java瘋狂講義》(第三版)

run()方法:方法體即線程執(zhí)行體

線程Target

執(zhí)行體:run或call方法

call()方法:可以用get()來獲取返回值


線程生命周期:

1、new;新建

2、runnable;就緒

3、running;運(yùn)行

4、blocked;阻塞

可以用sleep方法或者suspend方法進(jìn)入阻塞狀態(tài)

5、dead;死亡

新建——>就緒——>運(yùn)行——>死亡

新建通過start方法進(jìn)入就緒狀態(tài);

運(yùn)行通過阻塞回到就緒狀態(tài);

通過以下情形進(jìn)入阻塞:

1、sleep或suspend

2、IO阻塞

3、等到同步鎖、等待通知

運(yùn)行時(shí)通過stop方法或者run方法、call方法執(zhí)行體完成進(jìn)入死亡狀態(tài)

或捕捉到error或異常;


所有現(xiàn)代的桌面和服務(wù)器操作系統(tǒng)都采用了搶占式調(diào)度策略


join方法(插隊(duì)):讓某線程等待調(diào)用join方法的線程

后臺(tái)線程:為其他線程提供服務(wù)

setDaemon(true)成為后臺(tái)線程

特征:

1、前臺(tái)線程都死亡,后臺(tái)線程自動(dòng)死亡;

例:JVM垃圾回收線程

注意:setDaemon必須放在start方法前調(diào)用


線程讓步:yield()方法

某線程調(diào)用yield 方法后:you優(yōu)先級(jí)比當(dāng)前線程更高的處于就緒狀態(tài)的線程,才會(huì)獲得執(zhí)行機(jī)會(huì)


sleep方法與yield方法的區(qū)別:

1、sleep暫停后,會(huì)給其他線程機(jī)會(huì);yield方法只會(huì)給優(yōu)先級(jí)相同或更高的線程機(jī)會(huì);

2、阻塞狀態(tài)sleep

就緒狀態(tài)yield

3、yield無捕捉異常

4、sleep方法具有更高的可移植性


改變線程優(yōu)先級(jí)

默認(rèn)與創(chuàng)建它的父線程優(yōu)先級(jí)相同


線程同步:

線程安全問題:

邏輯:加鎖——>修改——>釋放所

synchronized關(guān)鍵字

使用synchronized關(guān)鍵字修飾方法令該方法成為同步方法

或synchronized(obj){...}


線程通信

wait方法等待

notify方法喚醒

notifyAll方法喚醒所有

由同步監(jiān)視器對(duì)象調(diào)用


Condition控制線程通信

接口BlockingQueue控制線程通信:兩個(gè)線程通過交替向BlockingQueue中放入元素、取出元素

即可很好地控制線程的通信


線程組ThreadGroup來表示線程組,它可以對(duì)一批線程進(jìn)行分類管理,Java允許程序直接對(duì)線程組進(jìn)行控制


線程池

1、池的概念

2、線程池可以有效地控制系統(tǒng)中并發(fā)線程的數(shù)量


相關(guān)類

ThreadLocal類,它代表一個(gè)線程局部變量,通過把數(shù)據(jù)放在ThreadLocal中就可以讓每個(gè)線程創(chuàng)建一個(gè)該變量的副本


線程安全集合類

以Concurrent開頭的集合類代表了支持并發(fā)訪問的集合,它們支持多個(gè)線程并發(fā)寫入訪問,這些寫入訪問的操作都是安全的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 該文章轉(zhuǎn)自:http://blog.csdn.net/evankaka/article/details/44153...
    加來依藍(lán)閱讀 7,381評(píng)論 3 87
  • Java多線程學(xué)習(xí) [-] 一擴(kuò)展javalangThread類 二實(shí)現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,994評(píng)論 1 18
  • 本文主要講了java中多線程的使用方法、線程同步、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等。 首先講...
    李欣陽閱讀 2,509評(píng)論 1 15
  • 寫在前面的話: 這篇博客是我從這里“轉(zhuǎn)載”的,為什么轉(zhuǎn)載兩個(gè)字加“”呢?因?yàn)檫@絕不是簡(jiǎn)單的復(fù)制粘貼,我花了五六個(gè)小...
    SmartSean閱讀 4,793評(píng)論 12 45
  • 我的思念 是夜里的海灣 海灣是藍(lán)灰色 你 是靜靜的一只小船 教人 如癡如醉地 喜歡
    青谷2016閱讀 269評(píng)論 0 1