線程的實現與安全

JAVA中,建立線程的方式有三種

第一種:繼承Thread 複寫run方法安全

第二種:實現Runnable 覆寫run方法this

第三種:實現Callable 覆寫call方法spa

最經常使用的是第二中方法線程

區別:第二種和第三種方法的區別在於返回值,run方法是沒有返回值的,可是call方法是能夠帶返回值對象

線程生命週期

1.new  新建繼承

2.調用start方法    就緒生命週期

3.獲取資源  運行內存

4.資源不足或者未獲取資源  阻塞資源

5.執行完畢  死亡同步

線程安全解決方法:四種

1.同步代碼塊  即便用

synchronized(obj){

            須要保證安全的代碼

}

2.同步方法 即在方法上加上同步修飾詞

eg:      synchronized  返回類型  方法名(參數){方法體}

注:該方式默認使用this也就是當前對象做爲同步鎖的監聽器

3.靜態方法

由於靜態方法在內存中是惟一存在的,因此使用靜態方法能夠保證同一時間只會被一個線程所使用

4.同步鎖 Lock

此方法是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();

                }

        }

}

相關文章
相關標籤/搜索