1. 程式人生 > >轉載 wait(),notify(),notifyAll()用來操作線程為什麽定義在Object類中?

轉載 wait(),notify(),notifyAll()用來操作線程為什麽定義在Object類中?

not 調用 存在 await on() 比較 保護 接口 sign

  1. 這些方法存在於同步中;
  2. 使用這些方法必須標識同步所屬的鎖;
  3. 鎖可以是任意對象,所以任意對象調用方法一定定義在Object類中。

Condition是在java 1.5中才出現的,它用來替代傳統的Object的wait()、notify()實現線程間的協作,相比使用Object的wait()、notify(),使用Condition1的await()、signal()這種方式實現線程間協作更加安全和高效。因此通常來說比較推薦使用Condition,在阻塞隊列那一篇博文中就講述到了,阻塞隊列實際上是使用了Condition來模擬線程間協作。

  • Condition是個接口,基本的方法就是await()和signal()方法;
  • Condition依賴於Lock接口,生成一個Condition的基本代碼是lock.newCondition()
  • 調用Condition的await()和signal()方法,都必須在lock保護之內,就是說必須在lock.lock()和lock.unlock之間才可以使用

Conditon中的await()對應Object的wait();

Condition中的signal()對應Object的notify();

Condition中的signalAll()對應Object的notifyAll();

轉載 wait(),notify(),notifyAll()用來操作線程為什麽定義在Object類中?