DAY17Java語言入門基礎教學 多線程

多線程

線程與進程

  1. 進程 正在運行的一個程序
    系統(tǒng)會為這個進程分配獨立的內存資源
  2. 線程 具體執(zhí)行任務的最小單位
  • 一個進程最少擁有一個線程(主線程 運行起來就執(zhí)行的線程)
  • 線程之間是共享內存資源的(進程申請的)
  • 線程之間可以通信(數(shù)據(jù)傳遞 多數(shù)為主線程和子線程)
  • 每一個線程都有自己的運行回路(生命周期)
  • 線程的生命周期 狀態(tài)


    線程的生命周期

NEW 新建 線程剛被創(chuàng)建好
RUNNABLE 就緒狀態(tài) 只要搶到時間片就可以運行這個線程
BLOCKED 阻塞狀態(tài) sleep wait
WAITING 等待 wait
TIMED_WAITING
TERMINATED

多線程

為什么需要創(chuàng)建一個子線程?

如果在主線程中存在比較耗時的操作, 這些操作會阻塞主線程, 后面的任務必須等這些任務執(zhí)行完畢之后才執(zhí)行, 用戶體驗差, 為了不阻塞主線程, 需要將耗時的任務放在子線程中執(zhí)行

如何創(chuàng)建一個子線程?

  1. 協(xié)議類繼承于 Thread 實現(xiàn)run方法
  • join 讓當前這個線程阻塞 等join的線程執(zhí)行完畢再執(zhí)行
  • setName 設置線程名稱
  • getName 獲取線程名稱
  • currentThread 獲取當前運行的線程名稱
  • start 開啟線程
lass Ticker extends Thread{
    private int i;

    @Override
    public void run() {
        for(i=1;i<=100;i++) {
            //返回當前線程的名字
            System.out.println(getName()+":"+i);
        }
    }

    public static void main(String[] args){
        //main方法里面執(zhí)行的代碼 是在主線程里面執(zhí)行的
        //(geiName)     主線程的名稱是main
        String name =  Thread.currentThread().getName();
        System.out.println(name);

        //創(chuàng)建Thread的對象
        Ticker tt1 = new Ticker();

        //設置線程的名稱
        tt1.setName("子線程1");

        //開啟任務
        tt1.start();
    }
}
  1. 實現(xiàn)Runnable接口 實現(xiàn)run方法
  • 創(chuàng)建任務 創(chuàng)建類實現(xiàn)Runnable接口
  • 使用Thread為這個任務分配線程
  • 開啟任務 start


    Runnable
  1. 通過 Callable 和 Future 創(chuàng)建線程
  • 創(chuàng)建 Callable 接口的實現(xiàn)類晒衩,并實現(xiàn) call() 方法,該 call() 方法將作為線程執(zhí)行體,并且有返回值应狱。
  • 創(chuàng)建 Callable 實現(xiàn)類的實例记焊,使用 FutureTask 類來包裝 Callable 對象虏杰,該 FutureTask 對象封裝了該 Callable 對象的 call() 方法的返回值腥刹。
  • 使用 FutureTask 對象作為 Thread 對象的 target 創(chuàng)建并啟動新線程脑溢。
  • 調用 FutureTask 對象的 get() 方法來獲得子線程執(zhí)行結束后的返回值喻奥。

三種方法對比

  1. 采用實現(xiàn) Runnable席纽、Callable 接口的方式創(chuàng)建多線程時,線程類只是實現(xiàn)了 Runnable 接口或 Callable 接口撞蚕,還可以繼承其他類润梯。
  2. 使用繼承 Thread 類的方式創(chuàng)建多線程時,編寫簡單,如果需要訪問當前線程纺铭,則無需使用 Thread.currentThread() 方法寇钉,直接使用 this 即可獲得當前線程。

體會

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末舶赔,一起剝皮案震驚了整個濱河市扫倡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竟纳,老刑警劉巖撵溃,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锥累,居然都是意外死亡缘挑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門桶略,熙熙樓的掌柜王于貴愁眉苦臉地迎上來语淘,“玉大人,你說我怎么就攤上這事际歼】髂龋” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵蹬挺,是天一觀的道長维贺。 經(jīng)常有香客問我,道長巴帮,這世上最難降的妖魔是什么溯泣? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮榕茧,結果婚禮上垃沦,老公的妹妹穿的比我還像新娘。我一直安慰自己用押,他們只是感情好肢簿,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜻拨,像睡著了一般池充。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缎讼,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天收夸,我揣著相機與錄音,去河邊找鬼血崭。 笑死卧惜,一個胖子當著我的面吹牛厘灼,可吹牛的內容都是我干的。 我是一名探鬼主播咽瓷,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼设凹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了茅姜?” 一聲冷哼從身側響起围来,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匈睁,沒想到半個月后监透,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡航唆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年胀蛮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糯钙。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡粪狼,死狀恐怖,靈堂內的尸體忽然破棺而出任岸,到底是詐尸還是另有隱情再榄,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布享潜,位于F島的核電站困鸥,受9級特大地震影響,放射性物質發(fā)生泄漏剑按。R本人自食惡果不足惜疾就,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望艺蝴。 院中可真熱鬧猬腰,春花似錦、人聲如沸猜敢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缩擂。三九已至鼠冕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撇叁,已是汗流浹背供鸠。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陨闹,地道東北人楞捂。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像趋厉,于是被迫代替她去往敵國和親寨闹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內容

  • ??一個任務通常就是一個程序君账,每個運行中的程序就是一個進程繁堡。當一個程序運行時,內部可能包含了多個順序執(zhí)行流乡数,每個順...
    OmaiMoon閱讀 1,664評論 0 12
  • 先看幾個概念:線程:進程中負責程序執(zhí)行的執(zhí)行單元净赴。一個進程中至少有一個線程绳矩。多線程:解決多任務同時執(zhí)行的需求,合理...
    yeying12321閱讀 540評論 0 0
  • 7月20日知識點 今天的主要內容——線程 線程線程的基本概念線程與進程的區(qū)別線程的兩種創(chuàng)建方式(掌握)注意線程兩種...
    須臾之北閱讀 13,653評論 0 4
  • 一.線程與進程相關 1.進程 ??定義:進程是具有獨立功能的程序關于某個數(shù)據(jù)集合上的一次運行活動玖翅,進程是操作系統(tǒng)分...
    Geeks_Liu閱讀 1,710評論 2 4
  • Java-Review-Note——4.多線程 標簽: JavaStudy PS:本來是分開三篇的翼馆,后來想想還是整...
    coder_pig閱讀 1,641評論 2 17