《Java編程思想》學習筆記(第二十一章):併發

併發的解決的問題:

  • 速度

  • 設計可管理性

更快的執行

  • 併發可以提高在單處理器上的程序性能;

  • 實現併發最直接的方式是在操作系統級別使用進程

    • 週期性的將CPU從一個進程切換到另一個進程;
    • 但是JAVA使用的併發系統會共享內存和I/O這樣的資源,所以必須要協調不同驅動線程任務對這些資源的使用;

線程機制

  • 機制:切分CPU時間,子線程都能分配到一定的時間執行任務;
  • 好處:CPU的個數可以任意擴展,與實際的線程代碼運行無關;

Thread

  • 讓步:Thread.yield():在run()方法中調用Thread.yield()方法是對線程調度器的一種建議;
    • 線程調度器:Java線程機制的一部分,可以將CPU從一個線程轉移給另一個線程;
    • 暗示可以交給別的同樣優先級的線程運行;
    • 可以看到任務換進換出的證據;
  • 執行:run():導出Runnable類的時候必須要有一個run()方法,這個方法不會產生任何內在的線程能力,要實現線程行爲,必須顯示的將一個任務附着到線程上;
  • 優先級

    • 設置優先級:在run()方法的開頭處,Thread.currentThread().setPriority(int priority) ;
    • 實際原理:提高頻率(實際優先分配時間片);
    • 常用級別:MAX_PRIORITY,NORM_PRIORITY,MIN_PRIORITY;
  • 後臺線程(daemon)

    • 定義:程序在運行的過程中在後臺提供的一種通用服務的線程,這種線程並不能成爲程序不可獲取的部分;
    • 理解:如果非後臺線程死了,那麼後臺線程也就會被殺死;
    • 設置:在啓動(start())方法之前,調用threadSymbol(實現了runnable接口的一個線程實例).setDaemon(true);
    • 判斷:isDaemon();
  • 加入一個線程(join)

    • 定義:如果一個線程在另一個線程t上調用t.join(),那麼次線程將被掛起,知道目標線程t結束後才恢復;
    • 理解:有A和B兩個線程,如果A線程在run()方法中,調用了B.join(),意思就A線程跑在路上的時候,把B線程的任務給加進來了,那麼就只能等着B跑完然後A接着跑。但是呢,如果想強制中斷也可以啊。直接掉B.interrupt()方法中斷掉B線程,但是記得try-catch;
    • +
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章