線程的同步是保證多線程安全訪問競爭資源的一種手段。對於同步,在具體的Java代碼中須要完成一下兩個操做:把競爭訪問的資源標識爲private;同步哪些修改變量的代碼,使用synchronized關鍵字同步方法或代碼。 java
線程退出同步方法時將釋放掉方法所屬對象的鎖,但還應該注意的是,同步方法中還能夠使用特定的方法對線程進行調度。這些方法來自於java.lang.Object類。 安全
void notify() 喚醒在此對象監視器上等待的單個線程。 void notifyAll() 喚醒在此對象監視器上等待的全部線程。 void wait() 致使當前的線程等待,直到其餘線程調用此對象的 notify() 方法或 notifyAll() 方法。 void wait(long timeout) 致使當前的線程等待,直到其餘線程調用此對象的 notify() 方法或 notifyAll() 方法,或者超過指定的時間量。 void wait(long timeout, int nanos) 致使當前的線程等待,直到其餘線程調用此對象的 notify() 方法或 notifyAll() 方法,或者其餘某個線程中斷當前線程,或者已超過某個實際時間量。
對於同步,除了同步方法外,還能夠使用同步代碼塊,有時候同步代碼塊會帶來比同步方法更好的效果。追其同步的根本的目的,是控制競爭資源的正確的訪問,所以只要在訪問競爭資源的時候保證同一時刻只能一個線程訪問便可,所以Java引入了同步代碼快的策略,以提升性能。 多線程
注意: 性能