11.5(day21) 進程 線程 多線程 線程安全問題 單例模式 死鎖 線程生命週期

進程:java

   正在進行中的程序安全

線程:多線程

   可獨立運行的代碼的片斷this

   所屬於進程spa

多線程:線程

   一個進程中有多個可獨立運行的代碼片斷對象

一個進程中至少有一個進程繼承

若是有一個線程的程序,稱之爲單線程程序接口

 

java語言支持多線程生命週期

 

全部的程序執行都在內存中開闢空間,依賴CPU執行,咱們看的是CPU同時執行這些應用程序,其實CPU某一時刻只能執行一個程序,CPU坐着高速的切換動做

 

建立線程:

    1.繼承java.lang.Thread類

      1.定義類繼承Thread類

      2.重寫run方法(run便是子線程所要運行的代碼)

      3.在主線程中建立子線程,並啓動子線程

      弊端:

         因爲java是單繼承,若是類已經繼承了其餘類,不能再去繼承線程類

         便是當前類沒有繼承其餘類,是否繼承線程,也是要考慮繼承體系結構,不能去改變結構

    2.實現java.lang.Runnable接口

      1.定義類實現Runnable接口

      2.在類中實現run方法

      3.建立線程對象,thread對象

      4.將實現類對象,做爲參考傳遞給thread對象的構造方法

      5.調用start方法啓動線程

獲取當前線程對象:

    Thread.currentThread() 該方法寫到哪裏獲取的就是所在的線程的對象

獲取線程名稱:

    getName()

設置線程名:

    setName(name)

線程優先級:

    1-10

    默認級別:5

    getPriority():獲取優先級

    setPriority(number):設置優先級

 

線程安全問題:

    緣由:

       多個線程操做同一個資源時,對該資源操做的代碼不止一行時,一個線程沒有執行完關於該資源的執行代碼,另外一個線程參與進來執行

    解決辦法:

       一個線程執行時,另外一個線程不能參與執行

       同步代碼塊:

          synchronized(鎖對象){

          }

          對象能夠爲任意對象

       前提:

          1.大於等於兩個以上的線程

          2.保證多線程使用的是同一個鎖對象

       好處:

          解決了多線程安全問題

       弊端:

          效率下降了  

單例模式:

    保證對象的惟一性

    1.將構造方法私有化

    2.建立本類的對象

    3.建立方法,返回本類對象

    兩種寫法:

        餓漢式:多線程訪問時沒有安全問題

        懶漢式:多線程訪問時有安全問題,不能保證對象的惟一,須要加入同步解決問題

死鎖:

    實際開發中不能出現死鎖

    程序卡在某一個地方,不能繼續向下執行,這種現象--死鎖

鎖對象:

    synchronized能夠用來修飾方法,修飾的方法具有了同步的特性

      1.實例同步方法:this

      2.靜態同步方法:類名.class

線程生命週期:

    新建狀態:new Thread(),new Thread(new Runnable(){})

    可運行狀態:調用start(),有執行資格,等到CPU調度

    正在運行狀態:CPU調度該線程

    終止狀態:run方法結束

    堵塞狀態:正在運行進入到該狀態,主動放棄執行資格,CPU不在調度

          startc sleep(時間):讓線程睡一會,時間到了天然醒---可運行狀態

          wait():讓線程等待   notify():喚醒處於等待狀態的線程---可運行狀態

          join():加入線程

當多線程中某一個線程發生了異常,這個線程中止運行並返回異常信息,其餘線程繼續運行不會中止,即對其餘線程沒有影響  

相關文章
相關標籤/搜索