java基礎之Thread筆記

一、線程進程介紹:javascript

  程序:指令和數據的有序集合,靜態概念;  java

  進程:執行程序的一次執行過程,一個動態概念,是系統資源分配的單位;spa

  線程:cpu調度和執行的過程,是獨立的執行路徑。線程

  他們之間的關係:一個進程能夠包含多個線程,至少一個線程。3d

  

二、建立線程:code

  A、繼承Thread類,重寫run()方法;對象

    

 

 

 

  B、實現Runnable接口,實現run()方法;blog

    

 

 

   C、實現Callable接口繼承

 

 

     

 

 

 三、線程狀態接口

  

 

  大體過程:new一個Thread後線程對象進入了新生狀態,當調用start()方法後,線程當即進入了就緒狀態,可是並非必定當即調度執行;調度後進入了運行狀態,這時候線程才執行線程內的代碼;當運行時調用sleep、wait或同步的鎖定時,線程就進入了阻塞狀態,只有當阻塞事件解除後從新進入就緒狀態等着cpu調度執行。完成全部代碼後或者中斷那麼線程進入死亡狀態,沒法再次啓動此死亡線程。

 

 

  Java線程的狀態有如下幾種:

  • New:新建立的線程,還沒有執行;
  • Runnable:運行中的線程,正在執行run()方法的Java代碼;
  • Blocked:運行中的線程,由於某些操做被阻塞而掛起;
  • Waiting:運行中的線程,由於某些操做在等待中;
  • Timed Waiting:運行中的線程,由於執行sleep()方法正在計時等待;
  • Terminated:線程已終止,由於run()方法執行完畢。

四、中斷線程

  

 

 

 

  A、

  

 

 

    B、sleep會使當前線程阻塞;時間到達後進入就緒狀態。每個對象都有一個鎖,sleep不會釋放鎖。

    C、Join會合併線程,插入後只有出入的線程執行完成後,纔會執行其餘線程,其餘線程會阻塞。

  D、在run()中使用Thread.yield()會使線程執行到此刻禮讓,可是不阻塞只是暫停。此刻cpu從新調度,可是禮讓不必定成功,取決於cpu再次調度了誰。

五、守護線程

  線程有用戶線程和守護線程。虛擬機確保用戶線程執行完畢,可是不用等待守護線程執行完畢。

  在調用start()方法前,調用setDaemon(true)把該線程標記爲守護線程:

  Thread t = new MyThread();   t.setDaemon(true);   t.start();

六、線程優先級

  

 

 

 

七、線程同步

  

 

  有兩種此關鍵字用法。

  A、synchronized方法

    在方法加此關鍵字

       

  B、synchronize塊

    

    

 

 

   比較: 

  

 

 

 八、lock

  

 

 

 

  

 

 

 九、線程通訊

  

  

 

  生產者消費者問題

  

相關文章
相關標籤/搜索