多個線程在操縱共享資源——實例變量時,為了保證每個線程能正常執行操作,保證共享資源能正常訪問和修改。Java引入了同步進制。
具體做法是在有可能引起共享資源競爭的代碼前加上synchronized標記。這樣的代碼被稱為同步代碼塊。
每個Java對象都有且只有一個同步鎖,在任何時刻,最多只允許一個線程擁有這把鎖。當一個線程要執行同步代碼塊時,必須先獲得該對象的鎖。
鎖池:
如果鎖已經被線程占用,其他想用鎖的線程進入該對象的鎖池中,線程進入阻塞狀態。
線程的通信
wait():執行該方法的線程釋放對象的鎖,Java虛擬機把該線程放到該對象的等待池中
notify():執行該方法的線程喚醒在對象的等待池中等待的一個線程。
notifyAll():會把對象的等待池中的所有線程都轉到對象的鎖池中。