大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Javase視頻學習-多線程總結

Javase視頻學習-多線程總結

更新時間:2020-02-09 10:41:39 來源:動力節點 瀏覽2261次


  一.線程間的通信


  定義


  多個線程并發執行時,默認情況下CPU是隨機切換線程的


  如果我們希望他們有規律的執行,就可以使用通信


  線程之間也不是直接干預某個線程,也是隨機的


  2.常用方法


  wait()讓當前線程處于等待狀態,并釋放鎖


  notify()喚醒某個等待中的線程


  notifyAll()喚醒所有等待中的線程


  3.演示(兩個線程之間的通信)


      Javase視頻學習-多線程總結


  4.演示(多個線程間的通信)


      Javase視頻學習-多線程總結

      Javase視頻學習-多線程總結


  5.注意事項


  線程間的所有通信行為都必須在同步代碼塊中執行


  這些行為都是鎖調用的


  當一個線程陷入等待,線程會釋放掉鎖,并且無法動彈,即使被喚醒了,也僅僅表示有了獲取鎖的機會,只有當真正獲取到鎖的時候才能繼續運行


  wait方法還有重載的方法,可以傳入毫秒值,表示多少毫秒之后當前線程自動喚醒


  一個鎖只能喚醒被自己鎖定的線程


  無法在當前同步代碼塊內操作別的鎖


  6.測試題


  需求:小明同學上了大學,父親每次給1000塊,小明每次花100元,當錢花完了,就打電話給父親,通知他去銀行存錢,編程模擬


  思考,為什么wait和notify方法定義在Object中?


  二.ThreadLocal


  定義


  ThreadLocal是線程的本地變量,是一個存儲變量的容器,存入到這個容器中的變量的變量可以在線程的任何位置取出.


  ThreadLocal中的變量是使用線程分離的,別的線程無法使用,保證了變量的安全性


  2.演示


      Javase視頻學習-多線程總結


  三.互斥鎖


  定義


  使用ReentrantLock類代替synchronized關鍵字,提供了鎖定和解鎖的方法


  提供了更多的操作所得方法


  2.常用方法


  lock()鎖定當前線程


  unlock()解鎖


  newCondition()獲取可以操作線程等待和喚醒的Condition對象


  await()讓當前線程陷入等待


  signal()喚醒某個被鎖定的線程


  3.演示


      Javase視頻學習-多線程總結


  4.注意事項


  互斥鎖提供了更多的操作線程的方法供我們使用


  Condition對象允許我們在任意鎖內喚醒任意線程


  前提是使用統一把鎖(同一個ReentrantLock對象)


  四.線程的七種狀態


     Javase視頻學習-多線程總結


  2.狀態解析


  初始狀態:線程對象創建完成


  就緒狀態:線程可以被執行


  運行狀態:線程正在運行中


  阻塞狀態:線程被休眠


  等待隊列:線程陷入無限的等待中


  鎖池狀態:線程被喚醒,但沒有獲取到鎖


  死亡狀態:線程執行完畢,被關閉


  3.注意事項


  大部分書籍里都講線程的狀態分為5類,既初始,就緒,運行,阻塞,死亡


  但我更愿意將阻塞狀態細分出來,因為阻塞,等待隊列,鎖池,完全是不同的性質


  五.線程組(了解)


  定義


  Java中使用ThreadGroup來表示線程組,它可以對一批線程進行分類管理,Java允許程序直接對線程組進行控制。


  提供了一些操作整體的方法,比如設置組中線程的權限,銷毀所有所有線程等等


  2.演示


  publicclassTestDemo{


  publicstaticvoidmain(String[]args){


  Threadt1=newThread();


  Threadt2=newThread();


  //獲取線程的組


  System.out.println(t1.getThreadGroup().getName());


  System.out.println(t2.getThreadGroup().getName());


  //創建新的線程組


  ThreadGroupgroup=newThreadGroup("新的線程組");


  //創建線程的時候確定組給線程起個新名字


  Threadt3=newThread(group,"張三");


  Threadt4=newThread(group,"李四");


  System.out.println(t3.getThreadGroup().getName());


  System.out.println(t4.getThreadGroup().getName());


  }


  }


  六.線程池(了解)


  定義


  程序啟動一個新線程成本是比較高的,因為它涉及到要與操作系統進行交互。而使用線程池可以很好的提高性能,尤其是當程序中要創建大量生存期很短的線程時,更應該考慮使用線程池。線程池里的每一個線程代碼結束后,并不會死亡,而是再次回到線程池中成為空閑狀態,等待下一個對象來使用


  在JDK5之前,我們必須手動實現自己的線程池,從JDK5開始,Java內置支持線程池


  2.演示


  publicstaticvoidmain(String[]args){


  Runnablerunnable=newRunnable(){


  publicvoidrun(){


  System.out.println(Thread.currentThread().getName()+"線程執行了");


  }


  };


  //創建線程池


  ExecutorServicees=Executors.newCachedThreadPool();


  //調用線程池中的線程執行邏輯代碼


  es.submit(runnable);


  es.submit(runnable);


  es.shutdown();


  }


  七.Runtime類


  定義


  這是一個單例類,可以運行系統命令


  2.演示


  publicstaticvoidmain(String[]args)throwsIOException{


  Runtimeruntime=Runtime.getRuntime();


  runtime.exec("shutdown-s-t300");//300秒后關機


  runtime.exec("shutdown-a");//取消關機


  }


  八.Timer類


  定義


  定時器,可以在指定時間執行任務,可以重復執行


  其實就是在指定時間去調用某個方法


  任務類必須繼承TimerTask類,并且重寫run()方法


  2.常用方法


  schedule(TimerTasktask,Datetime)安排在執行時間執行任務


  schedule(TimerTasktask,Datetime,longperiod)安排在指定時間開始執行任務,并按固定時間長度重復執行


  schedule(TimerTasktask,longdelay)從當前時間延遲一段時間執行任務


  schedule(TimeTasktask,longdelay,longperiod)從當前時間延遲一段時間執行任務,并按固定時間長度重復執行


  3.演示


  publicstaticvoidmain(String[]args)throwsIOException{


  TimerTasktask=newTimerTask(){


  @Override


  publicvoidrun(){


  System.out.println("趕緊起床了........");


  }


  };


  Timertimer=newTimer();


  timer.schedule(task,5000);


  }


  作業


  第一題


  需求:創建3個線程,讓著三個線程按順序執行(比如:線程一,線程二,線程三.......)


  2.第二題


  子線程循環10次,接著主線程循環100次,接著又回到子線程循環10次,接著再回到主線程又循環100次,如此循環50次,試寫出代碼


  1.擴展題


  需求:有四個線程1、2、3、4。線程1的功能就是輸出1,線程2的功能就是輸出2,以此類推.........現在有四個文件ABCD。初始都為空。現要讓四個文件呈如下格式:


  A:123412....


  B:234123....


  C:341234....


  D:412341....


  2.擴展題


  啟動3個線程打印遞增的數字,線程1先打印1,2,3,4,5,然后是線程2打印6,7,8,9,10,然后是線程3打印11,12,13,14,15.接著再由線程1打印16,17,18,19,20....以此類推,直到打印到75.


  3.擴展題


  查閱資料,制作一個鬧鈴程序,到設定的時間就播放音樂


  動力節點Javase相關視頻免費下載學習


  Javase視頻教程【301集】:http://m.dabaquan.cn/v104/


  Java視頻下載【JavaSE進階】:http://m.dabaquan.cn/v61/


Javase視頻學習-多線程總結


       以上就是動力節點Java培訓機構小編介紹的“Javase視頻學習-多線程總結”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


  相關內容


  java多線程的狀態轉換以及基本操作


  常見Java多線程面試題總結


  Java多線程學習,深入解析


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美手机手机在线视频一区 | 九九福利视频 | 四虎国产永久在线精品免费观看 | 久久中文字幕亚洲精品最新 | 成人国产精品视频频 | 综合色伊人 | 亚洲欧洲尹人香蕉综合 | 国产成人毛片精品不卡在线 | 国产一国产一级毛片视频在线 | 离线枕边人国语在线影视 | 国产原创巨作精品 | 久久永久免费 | 看免费5xxaaa| 亚洲一区二区三区视频 | 亚洲日产 | 久久福利精品 | 免费观看成人毛片 | a集毛片| 欧美日韩国产成人综合在线影院 | 伦理久久 | 亚洲欧洲视频在线 | 亚洲国产aaa毛片无费看 | 热久久在线观看 | 精品色综合 | 精品理论片一区二区三区 | 九九黄色大片 | 中国欧美一级毛片免费 | 欧美亚洲国产成人精品 | 国内自拍 在线播放 网红 | 亚洲国产高清人在线 | 国产精品麻豆高清在线观看 | 在线欧美日韩国产 | 精品久久久久久午夜 | 国产视频在线一区 | 亚洲图片一区二区 | 亚洲乱码视频在线观看 | 日韩三级| 二级毛片全部 | 久草免费色站 | 好男人午夜影院 | 天天做天天爱天天爽综合网 |