進程: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():加入線程
當多線程中某一個線程發生了異常,這個線程中止運行並返回異常信息,其餘線程繼續運行不會中止,即對其餘線程沒有影響