java筆記--多線程總結(jié)

停止線程的方法:

1 stop方法颜懊。

2 run方法結(jié)束敞斋。

怎么控制線程的任務(wù)結(jié)束呢丹墨?
任務(wù)中都會(huì)有循環(huán)結(jié)構(gòu),只要控制住循環(huán)就可以結(jié)束任務(wù)兢仰。

控制循環(huán)通常就用定義標(biāo)記來完成(變量flag)乍丈。

但是如果線程處于凍結(jié)狀態(tài),無法讀取標(biāo)記把将。如何結(jié)束呢轻专?

可以使用interrupt()方法將線程從凍結(jié)狀態(tài)強(qiáng)制恢復(fù)到運(yùn)行狀態(tài)中來,讓線程具備cpu的執(zhí)行資格察蹲。

但是強(qiáng)制動(dòng)作會(huì)發(fā)生了InterruptedException请垛,記得要處理。

class StopThread implements Runnable{
    private boolean flag=true;
    public synchronized void run(){
        while(flag){
            try{
                wait();
            }catch(InterruptedException e){
                System.out.println(Thread.currentThread().getName()+"....."+e);
                flag=false;
            }
            System.out.println(Thread.currentThread().getName()+".....++++");
        }
    }
    public void setFlag(){
        flag=false;
    }
}

public class StopThreadDemo {
    public static void main(String[] args) 
    {
        StopThread st = new StopThread();

        Thread t1 = new Thread(st);
        Thread t2 = new Thread(st);

        t1.start();
        t2.setDaemon(true);
        t2.start();


        int num = 1;
        for(;;)
        {
            if(++num==50)
            {
//              st.setFlag();
                t1.interrupt();
//              t2.interrupt();
                break;
            }
            System.out.println("main...."+num);
        }

        System.out.println("over");
    }
}
臨時(shí)加入一個(gè)線程運(yùn)算時(shí)可以使用join方法递览。
class Demo implements Runnable{
    public void run(){
        for(int x=0;x<50;x++){
            System.out.println(Thread.currentThread().toString()+"....."+x);
            Thread.yield();
        }
    }
}
public class JoinDemo {
    public static void main(String[] args) throws Exception
    {
        Demo d = new Demo();

        Thread t1 = new Thread(d);
        Thread t2 = new Thread(d);

        t1.start();


        t2.start();
//      t2.setPriority(Thread.MAX_PRIORITY);

        t1.join();//t1線程要申請(qǐng)加入進(jìn)來叼屠,運(yùn)行瞳腌。臨時(shí)加入一個(gè)線程運(yùn)算時(shí)可以使用join方法绞铃。

        for(int x=0; x<50; x++)
        {
//          System.out.println(Thread.currentThread()+"....."+x);
        }
    }
}
多線程技術(shù)總結(jié):

|--進(jìn)程:系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。
|--線程:cpu調(diào)度和分派的基本單位嫂侍。

線程與進(jìn)程的關(guān)系:

1.一個(gè)線程只能屬于一個(gè)進(jìn)程儿捧,而一個(gè)進(jìn)程可以有多個(gè)線程荚坞,但至少有一個(gè)線程。
2.資源分配給進(jìn)程菲盾,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源颓影。
3.線程在執(zhí)行過程中,需要協(xié)作同步懒鉴。不同進(jìn)程的線程間要利用消息通信的辦法實(shí)現(xiàn)同步诡挂。
4.線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體临谱。

線程與進(jìn)程的區(qū)別:

1.調(diào)度:線程作為調(diào)度和分配的基本單位璃俗,進(jìn)程作為擁有資源的基本單位。
2.并發(fā)性:不僅進(jìn)程之間可以并發(fā)執(zhí)行悉默,同一個(gè)進(jìn)程的多個(gè)線程之間也可以并發(fā)執(zhí)行城豁。
3.擁有資源:進(jìn)程是擁有資源的一個(gè)獨(dú)立單位,線程不擁有系統(tǒng)資源抄课,但可以訪問隸屬于進(jìn)程的資源唱星。
4.系統(tǒng)開銷:在創(chuàng)建或撤銷進(jìn)程的時(shí)候,由于系統(tǒng)都要為之分配和回收資源跟磨,導(dǎo)致系統(tǒng)的明顯大于創(chuàng)建或撤銷線程時(shí)的開銷间聊。但進(jìn)程有獨(dú)立的地址空間,進(jìn)程崩潰后抵拘,在保護(hù)模式下不會(huì)對(duì)其他的進(jìn)程產(chǎn)生影響甸饱,而線程只是一個(gè)進(jìn)程中的不同的執(zhí)行路徑。線程有自己的堆棧和局部變量仑濒,但線程之間沒有單獨(dú)的地址空間叹话,一個(gè)線程死掉等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯墩瞳,但是在進(jìn)程切換時(shí)驼壶,耗費(fèi)的資源較大,效率要差些喉酌。

jvm中的多線程體現(xiàn):

|--主線程热凹,垃圾回收線程,自定義線程泪电。以及他們運(yùn)行的代碼位置般妙。

什么時(shí)候使用多線程,多線程的好處是什么相速?創(chuàng)建線程的目的碟渺?

|--當(dāng)需要多部分代碼同時(shí)執(zhí)行的時(shí)候杰妓,可以使用哀蘑。

創(chuàng)建線程的兩種方式:

1.繼承Thread颂龙;
|--復(fù)寫父類中的方法珊肃;目的:將自定義代碼存儲(chǔ)在run方法中,讓線程運(yùn)行绒极。
|--調(diào)用線程的start方法骏令,該方法有兩個(gè)作用:?jiǎn)?dòng)線程,調(diào)用run方法垄提。
2.實(shí)現(xiàn)Runnable接口
|--覆蓋Runnable接口中的run方法榔袋。
|--通過Thread類建立線程對(duì)象。
|--將Runnable接口的子類對(duì)象作為實(shí)際參數(shù)傳給Thread類的構(gòu)造函數(shù)铡俐。
|--調(diào)用Thread類的start方法開啟線程并調(diào)用Runnable接口子類的run方法摘昌。
#######實(shí)現(xiàn)方式和繼承方式有什么區(qū)別?
1.實(shí)現(xiàn)方式相比繼承方式的好處:避免了單繼承的局限性高蜂。在定義線程時(shí)聪黎,建議使用實(shí)現(xiàn)方式。
2.存放代碼位置不一樣:
|--繼承Thread:線程代碼放在Thread子類的run方法中备恤。
|--實(shí)現(xiàn)Runnable:線程代碼存在接口的子類的run方法中稿饰。
#######實(shí)現(xiàn)Runnable接口的好處:
1.將線程的任務(wù)從線程的子類中分離出來,進(jìn)行了單獨(dú)的封裝露泊。按照面向?qū)ο笏枷雽⑷蝿?wù)封裝成對(duì)象喉镰。
2.避免了java單繼承的局限性。

線程的5種狀態(tài)惭笑。

|--被創(chuàng)建
|--運(yùn)行
|--凍結(jié)
|--臨時(shí)阻塞
|--消亡

線程的安全問題侣姆。★★★★★

|--解決的體現(xiàn):synchronized
|--同步的前提:必須多個(gè)線程使用同一個(gè)鎖沉噩。(加上同步還出現(xiàn)安全問題捺宗,就需要用前提來思考。)
|--同步的兩種表現(xiàn)方法和區(qū)別:
|--同步的好處和弊端:
|--單例的懶漢式川蒙。
|--死鎖蚜厉。

線程間的通信。等待/喚醒機(jī)制畜眨。

|--概念:多個(gè)線程昼牛,不同任務(wù),處理同一資源康聂。
|--等待喚醒機(jī)制贰健。使用了鎖上的 wait notify notifyAll. ★★★★★
|--生產(chǎn)者/消費(fèi)者的問題。并多生產(chǎn)和多消費(fèi)的問題恬汁。 while判斷標(biāo)記伶椿。用notifyAll喚醒對(duì)方。 ★★★★★
|--JDK1.5以后出現(xiàn)了更好的方案,★★★
Lock接口替代了synchronized
Condition接口替代了Object中的監(jiān)視方法悬垃,并將監(jiān)視器方法封裝成了Condition
和以前不同的是游昼,以前一個(gè)鎖上只能有一組監(jiān)視器方法「什裕現(xiàn)在尝蠕,一個(gè)Lock鎖上可以多組監(jiān)視器方法對(duì)象。
可以實(shí)現(xiàn)一組負(fù)責(zé)生產(chǎn)者载庭,一組負(fù)責(zé)消費(fèi)者看彼。

線程常見的一些方法。

|--setDaemon()
|--join();
|--優(yōu)先級(jí)
|--yield();
|--在開發(fā)時(shí)囚聚,可以使用匿名內(nèi)部類來完成局部的路徑開辟靖榕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市顽铸,隨后出現(xiàn)的幾起案子茁计,更是在濱河造成了極大的恐慌,老刑警劉巖谓松,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件星压,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鬼譬,警方通過查閱死者的電腦和手機(jī)娜膘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來优质,“玉大人竣贪,你說我怎么就攤上這事」Γ” “怎么了演怎?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)避乏。 經(jīng)常有香客問我颤枪,道長(zhǎng),這世上最難降的妖魔是什么淑际? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任畏纲,我火速辦了婚禮,結(jié)果婚禮上春缕,老公的妹妹穿的比我還像新娘盗胀。我一直安慰自己,他們只是感情好锄贼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布票灰。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屑迂。 梳的紋絲不亂的頭發(fā)上浸策,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音惹盼,去河邊找鬼庸汗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛手报,可吹牛的內(nèi)容都是我干的蚯舱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼掩蛤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼枉昏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起揍鸟,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤兄裂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后阳藻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晰奖,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年稚配,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了畅涂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡道川,死狀恐怖午衰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冒萄,我是刑警寧澤臊岸,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站尊流,受9級(jí)特大地震影響帅戒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜崖技,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一逻住、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迎献,春花似錦瞎访、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽播演。三九已至,卻和暖如春伴奥,著一層夾襖步出監(jiān)牢的瞬間写烤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工拾徙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洲炊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓锣吼,卻偏偏與公主長(zhǎng)得像选浑,于是被迫代替她去往敵國(guó)和親蓝厌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玄叠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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