第4章 Java并發(fā)編程的基礎(chǔ)

線(xiàn)程的優(yōu)先級(jí):

線(xiàn)程的優(yōu)先級(jí)越高,占用CPU的能力越強(qiáng);

線(xiàn)程中斷:

調(diào)用線(xiàn)程對(duì)象的interrupt()函數(shù)后,線(xiàn)程并不會(huì)立即中斷满着,而是將線(xiàn)程的中斷標(biāo)識(shí)設(shè)為true,只有遇到阻塞函數(shù)(sleep()贯莺、wait()风喇、join())時(shí),才停止阻塞缕探,拋出異常魂莫,并將中斷標(biāo)識(shí)重置為false
如何正確中斷線(xiàn)程:
1.使用阻塞函數(shù)捕獲中斷撕蔼,在異常處理中跳出任務(wù)豁鲤,使線(xiàn)程結(jié)束運(yùn)行;

class Runner implements Runnable{
    @Override
    public void run() {
        while (true){
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                return;
            }
        }
    }
}

2.使用isInterrupted()判斷線(xiàn)程是否處于中斷狀態(tài)鲸沮,若是中斷狀態(tài)則跳出任務(wù)琳骡,使線(xiàn)程結(jié)束運(yùn)行;

class Runner implements Runnable{
    @Override
    public void run() {
        while (true){
           if (Thread.currentThread().isInterrupted()){
               return;
           }
        }
    }
}

3.使用中斷標(biāo)識(shí)讼溺;

class Runner implements Runnable{
    public volatile boolean on = true;
    @Override
    public void run() {
        while (true){
           if (on == false){
               return;
           }
        }
    }
}
線(xiàn)程獲取鎖狀態(tài)變化:
線(xiàn)程獲取鎖狀態(tài)變化

1.運(yùn)行中的線(xiàn)程嘗試獲取鎖楣号,若獲取成功則繼續(xù)運(yùn)行,獲取失敗則進(jìn)入同步隊(duì)列怒坯;
2.notify()將等待隊(duì)列的首節(jié)點(diǎn)加入同步隊(duì)列炫狱,notifyAll()將等待隊(duì)列的所有節(jié)點(diǎn)加入同步隊(duì)列;
3.同步隊(duì)列的首節(jié)點(diǎn)獲取同步狀態(tài)成功剔猿,即對(duì)應(yīng)線(xiàn)程獲取鎖成功视译;
4.同步隊(duì)列首節(jié)點(diǎn)的后續(xù)節(jié)點(diǎn)繼續(xù)通過(guò)自旋來(lái)獲取同步狀態(tài);

線(xiàn)程間通信:

多個(gè)線(xiàn)程相互配合完成計(jì)算任務(wù)归敬;
通信方式:
1.使用volatile變量作為信號(hào)量酷含;
2.使用synchronized進(jìn)行鎖同步鄙早;
3.使用wait()和notify()進(jìn)行通信;

//線(xiàn)程1
synchronized(lock){
    while(條件不滿(mǎn)足 ){
        lock.wait();
    }
    doSomething();
}
//線(xiàn)程2等待超時(shí)
synchronized(lock){
    while(條件不滿(mǎn)足 || remainTime > 0){
        lock.wait(remain)
        remainTime = futureTime - notTime;
    }
}
//線(xiàn)程3
synchronized(lock){
    改變條件;
    lock.notify();
}

使用wait()和notify()時(shí)線(xiàn)程的狀態(tài)變化


線(xiàn)程的狀態(tài)變化

a.RUNNING狀態(tài)的線(xiàn)程獲取鎖失敗則進(jìn)入BOLOCKED狀態(tài)椅亚;
b.RUNNING狀態(tài)的線(xiàn)程調(diào)用wait()方法后進(jìn)入WAITING狀態(tài)限番;
c.WAITING狀態(tài)的線(xiàn)程被別的線(xiàn)程notify()后進(jìn)入BLOCKED狀態(tài);
d.BLOCKED狀態(tài)的線(xiàn)程獲取鎖成功后進(jìn)入RUNNING狀態(tài)呀舔;
4.使用并發(fā)計(jì)數(shù)器CountDownLatch阻塞線(xiàn)程弥虐;

public class CountDownLatchTest {
    //計(jì)數(shù)器初始值為2
    static CountDownLatch countDownLatch = new CountDownLatch(2);

    public static void main(String[] args){
        Thread thread1 = new Thread(new Runner(), "thread 1");
        Thread thread2 = new Thread(new Runner(), "thread 2");
        try {
            thread1.start();
            thread2.start();
            //main線(xiàn)程阻塞,直到計(jì)數(shù)器值為0時(shí)被喚醒
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("main thread");
        return;
    }

    static class Runner implements Runnable{
        @Override
        public void run() {
            try {
                Thread.sleep(2000);
                System.out.println(Thread.currentThread().getName());
                //計(jì)數(shù)器減一
                countDownLatch.countDown();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}
數(shù)據(jù)庫(kù)連接池示例:

數(shù)據(jù)庫(kù)連接池

1.初始化一定數(shù)量的連接對(duì)象放入隊(duì)列中媚赖;
2.多個(gè)線(xiàn)程并發(fā)的取出霜瘪、歸還conn對(duì)象;
3.通過(guò)加鎖來(lái)解決并發(fā)問(wèn)題省古;

線(xiàn)程池示例:
線(xiàn)程池

1.多個(gè)worker線(xiàn)程并發(fā)從job隊(duì)列中獲取job粥庄;
2.job隊(duì)列為空時(shí)worker線(xiàn)程進(jìn)入waiting狀態(tài),往job隊(duì)列中添加job時(shí)notify()等待的線(xiàn)程豺妓,取出job并執(zhí)行;
3.worker線(xiàn)程從非空的job隊(duì)列中取出job布讹,然后執(zhí)行job琳拭;
缺點(diǎn):不能指定job到指定的worker線(xiàn)程執(zhí)行;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末描验,一起剝皮案震驚了整個(gè)濱河市白嘁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膘流,老刑警劉巖絮缅,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呼股,居然都是意外死亡耕魄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)彭谁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吸奴,“玉大人,你說(shuō)我怎么就攤上這事缠局≡虬拢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵狭园,是天一觀的道長(zhǎng)读处。 經(jīng)常有香客問(wèn)我,道長(zhǎng)唱矛,這世上最難降的妖魔是什么罚舱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任俊戳,我火速辦了婚禮,結(jié)果婚禮上馆匿,老公的妹妹穿的比我還像新娘抑胎。我一直安慰自己,他們只是感情好渐北,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布阿逃。 她就那樣靜靜地躺著,像睡著了一般赃蛛。 火紅的嫁衣襯著肌膚如雪恃锉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天呕臂,我揣著相機(jī)與錄音破托,去河邊找鬼。 笑死歧蒋,一個(gè)胖子當(dāng)著我的面吹牛土砂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谜洽,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼萝映,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了阐虚?” 一聲冷哼從身側(cè)響起序臂,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎实束,沒(méi)想到半個(gè)月后奥秆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咸灿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年构订,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片析显。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鲫咽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谷异,到底是詐尸還是另有隱情分尸,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布歹嘹,位于F島的核電站箩绍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏尺上。R本人自食惡果不足惜材蛛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一圆到、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卑吭,春花似錦芽淡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至掷邦,卻和暖如春白胀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抚岗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工或杠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宣蔚。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓向抢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親件已。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笋额,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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