java.lang.IllegalMonitorStateException異常拋出的解決方案


   在做項目的時候,遇到一個java.lang.IllegalMonitorStateException異常拋出,經過斷點調試以及資料搜索,得知這個問題,是在於wait()和notify(),這兩個等待的方法上,需synchronized加鎖方法進行同步,如此這個問題就這么簡單的解決了。一下代碼是我遇到問題的示例:

  沒有synchronized加鎖的情況,拋出該異常信息

	public void get() {
		// 如果flag=false
		if (!flag) {
			try {
			      this.wait();// 消費者等待
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// 若是有的情況下,則消費者進行其購買
			System.out.println(this.num + this.type);
			// 如果flag為false,則已經賣完了
			flag = false;
			// 則等待生產者生產線程
			this.notify();
		}
	}
	

  加了synchronized的情況,得以解決

    public synchronized void get() {
        // 如果flag=false,則表示沒有包子
        if (!flag) {
            try {
                  this.wait();// 消費者等待
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // 若是有的情況下,則消費者進行其購買
            System.out.println(this.num + this.type);
            // 如果flag為false,則已經賣完了
            flag = false;
            // 則等待生產者生產線程
            this.notify();
        }
    }
    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM