Java是一門非常流行的編程語言,它支持在程序中添加監視器,從而能夠使程序更加健壯和高效。下面將介紹Java如何添加監視器。
Java中使用synchronized關鍵字來實現線程互斥。其原理是,在任意時刻,只能有一個線程訪問被synchronized關鍵字保護的代碼塊。
可以使用以下語法來添加監視器:
synchronized (object) { //需要保護的代碼塊 }
上面的代碼中,object可以是任意一個Java對象。當一個線程訪問被synchronized關鍵字保護的代碼塊時,它會嘗試獲取object的鎖。如果鎖已經被其他線程占用,則該線程會被阻塞,直到鎖被釋放。
在Java中,可以使用wait和notify方法來實現線程的等待和喚醒。wait方法可以使當前線程等待,并釋放object的鎖,而notify方法可以喚醒一個等待object鎖的線程。
synchronized (object) { while (condition) { object.wait(); } //需要保護的代碼塊 object.notify(); }
上面的代碼中,condition是一個判斷條件。如果condition滿足,則線程會等待,直到被其他線程喚醒。如果condition不滿足,則線程會直接執行需要保護的代碼塊,并釋放object的鎖。
在Java中,還有一個類似的方法叫做notifyAll,它可以喚醒等待object鎖的所有線程。
synchronized (object) { while (condition) { object.wait(); } //需要保護的代碼塊 object.notifyAll(); }
上面的代碼中,如果有多個等待線程,notifyAll方法會喚醒所有線程,使它們競爭獲取object的鎖。
總之,Java中添加監視器非常簡單,只需要使用synchronized關鍵字和wait、notify、notifyAll方法即可。