第一種:繼承Thread 複寫run方法安全
第二種:實現Runnable 覆寫run方法this
第三種:實現Callable 覆寫call方法spa
最經常使用的是第二中方法線程
區別:第二種和第三種方法的區別在於返回值,run方法是沒有返回值的,可是call方法是能夠帶返回值對象
1.new 新建繼承
2.調用start方法 就緒生命週期
3.獲取資源 運行內存
4.資源不足或者未獲取資源 阻塞資源
5.執行完畢 死亡同步
synchronized(obj){
須要保證安全的代碼
}
eg: synchronized 返回類型 方法名(參數){方法體}
注:該方式默認使用this也就是當前對象做爲同步鎖的監聽器
由於靜態方法在內存中是惟一存在的,因此使用靜態方法能夠保證同一時間只會被一個線程所使用
此方法是jdk1.5後才擁有的,老古董的項目用不了
在建立對象時,建立一個同步鎖,而後在須要保證線程安全的方法內調用lock方法,方法運行結束後調用unlock方法解鎖
此方法默認使用Lock對象做爲監聽器
eg:
public class X {
//建立一個同步鎖,一般使用ReentrantLock(可重入鎖)。使用該對象能夠顯示地加鎖和解鎖
private final ReentrantLock lock = new ReentrantLock();
//須要保證線程安全的方法
public void m(){
//加鎖
lock.lock();
try{
//... method body
}finally{
//在finally釋放鎖
lock.unlock();
}
}
}