JAVA-day11

一短条、目的

  • 學(xué)習(xí)進(jìn)程和線程的概念
  • 學(xué)會(huì)實(shí)現(xiàn)Runnable接口創(chuàng)建線程
  • 了解synchronized線程同步
  • 學(xué)會(huì)使用Lock加鎖
  • 使用接口實(shí)現(xiàn)主線程和子線程的數(shù)據(jù)回調(diào)

二、相關(guān)技術(shù)

1.多線程

進(jìn)程:正在運(yùn)行的一個(gè)程序QQ IDE 瀏覽器
系統(tǒng)會(huì)為這個(gè)進(jìn)程分配獨(dú)立的內(nèi)存資源
線程:具體執(zhí)行任務(wù)的最小單位
一個(gè)進(jìn)程最少擁有一個(gè)線程(主線程 運(yùn)行起來就執(zhí)行的線程)
線程之間是共享內(nèi)存資源的(經(jīng)常申請(qǐng)的)
線程之間可以通信(數(shù)據(jù)傳遞:多數(shù)為主線程和子線程)
每一個(gè)線程都有自己的運(yùn)行回路(生命周期)
線程的生命周期 狀態(tài)
NEW:新建 線程剛被創(chuàng)建好
RUNNABLE:就緒狀態(tài) 只要搶到時(shí)間片就可以運(yùn)行這個(gè)線程
BLOCKED:阻塞狀態(tài) sleep wait
WAITING:等待 wait
TIMED_WAITING,
TERMINATED:終止

  • 1.如何創(chuàng)建一個(gè)線程 Thread Runable
  • 2.線程的同步 synchronized ReentrantLock
  • 3.主線程和子線程之間使用接口回調(diào)數(shù)據(jù)
  • 4.線程間的通信:synchronized(wait notifi notifiall)
    ReentrantLock lock;
    Condition c=lock.newCondition();
    await single songleall
2. 為什么需要?jiǎng)?chuàng)建子線程
  • 在主線程中存在比較耗時(shí)的操作:下載視頻 上傳文件 數(shù)據(jù)
    這些操作會(huì)阻塞主線程踱蛀,后面的任務(wù)必須等這些任務(wù)執(zhí)行完畢之后才能執(zhí)行 用戶體驗(yàn)比較差
  • 為了不阻塞主線程姐扮,需要將耗時(shí)的任務(wù)放在子線程中去處理
3.如何創(chuàng)建一個(gè)子線程
  • 1.定義一個(gè)類繼承于Thread 實(shí)現(xiàn)run方法

join:讓當(dāng)前這個(gè)線程阻塞 等join的線程執(zhí)行完畢再執(zhí)行
setName:設(shè)置線程名稱
getName:獲取線程名稱
currentThread:獲取當(dāng)前運(yùn)行的線程對(duì)象
start:開啟任務(wù)

  • 2.實(shí)現(xiàn)Runnable接口 實(shí)現(xiàn)run方法
    a.創(chuàng)建任務(wù) 創(chuàng)建類實(shí)現(xiàn)Runnable
    b.使用Thread 為這個(gè)任務(wù)分配線程
    c.開啟任務(wù) start
4.線程安全
  • synchronized Lock 加鎖解鎖
  • synchronized 同步監(jiān)聽器 需要一把鎖
  • 任何一個(gè)對(duì)象都有自己的一把鎖
  • 如果多個(gè)線程操作同一個(gè)代碼塊抽活,并且需要同步
  • 那么必須操作同一個(gè)對(duì)象/同一個(gè)對(duì)象的同一把鎖
  • 1.同步代碼塊
    synchronized(監(jiān)聽器/對(duì)象/鎖){
    需要同步的代碼
    }
  • 2.同步方法
    public synchronized void test(){}
    本質(zhì)是同步代碼塊 等價(jià)于
    synchronized(this){
    test();
    }

三、技術(shù)的使用

1.使用繼承Thread創(chuàng)建線程
class TestThread extends Thread {
    //實(shí)現(xiàn)Run方法
    //方法里面就是具體需要執(zhí)行的代碼
    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        System.out.println(name);
        for (int i = 0; i < 100; i++) {
            System.out.println(name + ":" + (i + 1));
         }
         super.run();
    }
}
2.創(chuàng)建線程
        TestThread tt=new TestThread();
        //設(shè)置線程的名稱
        tt.setName("子線程1");
        //開啟任務(wù)
        tt.start();

        TestThread tt2=new TestThread();
        //設(shè)置線程的名稱
        tt2.setName("子線程2");
        //開啟任務(wù)
        tt2.start();
3.實(shí)現(xiàn)Runnable接口創(chuàng)建線程
class YThread implements Runnable{
    public void run() {
        for (int i = 1; i <=100 ; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}
4.Runnable接口使用方式

(1)

        //創(chuàng)建一個(gè)任務(wù):創(chuàng)建一個(gè)類實(shí)現(xiàn)Runnable接口
        YThread yt=new YThread();
        //使用Thread操作這個(gè)任務(wù)
        Thread t=new Thread(yt);
        t.setName("子線程1");
        t.start();
        Thread t2=new Thread(yt);
        t2.setName("子線程2");
        t2.start();

(2)

Thread t=new Thread(new Runnable()){
           @Override
            public void run() {
                for (int i = 1; i <=100 ; i++) {
                    System.out.println(Thread.currentThread().getName()+":"+i);
                }
            }
}
t.setName("子線程1");
t.start();

(3)

 new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 1; i <=100 ; i++) {
                    System.out.println(Thread.currentThread().getName()+":"+i);
                }
            }
        }).start();

(4)

 //使用Lambda表達(dá)式
 //不建議:閱讀性太差
  new Thread(()->{
          for (int i = 1; i <=100 ; i++) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
  }).start();
5.使用RuntrantLock同步
//創(chuàng)建一個(gè)可重入的鎖
static ReentrantLock lock=new ReentrantLock();
 for (int i = 1; i <=100 ; i++) {
            //加鎖
            lock.lock();
            if (num>0){
                System.out.println(name+"出票"+num);
                num--;
               try {
                   condition.signal();
                   condition.await();
               }catch (InterruptedException e){
                   e.printStackTrace();
               }finally {

               }
            }else {
                break;
            }
            //解鎖
            lock.unlock();
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荞膘,一起剝皮案震驚了整個(gè)濱河市罚随,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羽资,老刑警劉巖淘菩,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罐监,死亡現(xiàn)場離奇詭異鳖藕,居然都是意外死亡运提,警方通過查閱死者的電腦和手機(jī)规脸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門睦焕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來百炬,“玉大人亲铡,你說我怎么就攤上這事萝衩∥⒎” “怎么了趾疚?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我糙麦,道長辛孵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任赡磅,我火速辦了婚禮魄缚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘焚廊。我一直安慰自己冶匹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布咆瘟。 她就那樣靜靜地躺著嚼隘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪袒餐。 梳的紋絲不亂的頭發(fā)上飞蛹,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音灸眼,去河邊找鬼卧檐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛焰宣,可吹牛的內(nèi)容都是我干的霉囚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宛徊,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了逻澳?” 一聲冷哼從身側(cè)響起闸天,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斜做,沒想到半個(gè)月后苞氮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓤逼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年笼吟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霸旗。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贷帮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诱告,到底是詐尸還是另有隱情撵枢,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站锄禽,受9級(jí)特大地震影響潜必,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沃但,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一磁滚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宵晚,春花似錦垂攘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钝凶,卻和暖如春仪芒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耕陷。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國打工掂名, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哟沫。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓饺蔑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗜诀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猾警,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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