線程同步 控制synchronize

在Java中,synchronized關鍵字是用來控制線程同步的,就是在多線程的環境下,控制synchronized代碼段不被多個線程同時執行。synchronized既能夠加在對象上,也能夠加在方法上,而加鎖的這段代碼稱爲「互斥區」或者「臨界區」安全

線程安全概念:多線程

當多個線程訪問某一個類(對象或方法)時,這個類始終都能表現出正確的行爲,那麼這個類(對象或方法)就是線程安全的。
 this

Java中的ReentrantLock和synchronized兩種鎖定機制的對比spa


線程是進程內的執行單元
synchronized
一、指定加鎖對象:對給定對象加鎖,進入同步代碼前要得到給定對象的鎖。
二、直接做用於實例方法:對當前實例加鎖,進入同步代碼前要得到當前實例的鎖。線程

     -->  synchronize(this)
三、直接做用於靜態方法:對當前類加鎖,進入同步代碼前要得到當前類的鎖對象

     -->synchronize(objiect.class)進程

  說明:當加鎖的方法是static修飾的方法,須要用當前類的鎖object.class 而不是 new Object實例鎖。同步

1、加在 對象上class

2、加在 方法上object

說明:加在 靜態方法上, 不一樣的線程 須要用一個對象 對象,才能能夠 控制線程同步

3、加在  靜態方法上

說明:加在 靜態方法上,鎖屬於 這個類對象, 不一樣的線程 用 不一樣的 對象,也能夠 控制線程同步

 

當用兩個線程,分別調用output和output2方法時,用synchrozed(this),能夠線程同步。

當用兩個線程,分別調用output和output3方法時,必須用synchrozed(object .class),才能夠線程同步。

相關文章
相關標籤/搜索