我知道wait()方法總是寫在同步方法/塊中,並鎖定對象,但我只想知道當所有方法都在Thread類中時出現了什麼問題?爲什麼wait,notify和notifyAll方法在Object Class中?
回答
它們也在Thread類中。但是這裏的一個線程實例同樣適合作爲任何其他對象的同步對象。
另外,已經有人質疑sun的這個決定了,因爲現在每個對象都承擔着可以同步的負擔,而恕我直言,他們早就應該將這個重構出來分離對象。
如果我需要的東西同步時,我經常這樣做:
private Object syncObject = new Object();
然後,我可以做我
synchronized(syncObject)
代碼
無處不在,沒有與任何人打擾在this
上意外同步。
這是多少負擔? – 2012-03-01 12:18:46
每個對象攜帶一個8字節的標題。如果我們不必能夠在對象上同步,那麼一個4字節的頭部(類ref)可能就足夠了。但是,我不知道額外頭文件的某些字節是否仍然需要用於GC,但是此信息可能仍然會嵌入到4字節頭文件中。 – Daniel 2012-03-01 12:21:40
在Thread對象上使用它們的問題是Thread爲了自己的目的而使用這個鎖。這很可能導致混亂和奇怪的錯誤。
這些方法的上下文是與Java中每個對象相關的鎖,因此我們無法將它們移動到Thread類。例如,我們可能會這樣做。線程1將一個項目添加到列表中並通知其他線程。線程2等待列表更新並執行一些操作:
thread 1
synchronized (lock) {
list.add(item);
lock.notifyAll();
}
thred 2
synchronized (lock) {
list.wait();
... do something with list
}
如果將這些方法移動到某個線程,那麼我們在這裏完成的操作將不可能。
這些方法適用於鎖和鎖與Object而不是Threads關聯。因此,它在Object類中。
方法wait(),notify()和notifyAll()不僅僅是方法,它們是同步實用程序並用於Java中線程之間的通信機制。
詳細說明如下:Why wait() ,notify() and notifyAll() methods are in Object class instead of Thread class?
- 1. 同步語句中的wait(),notify()和notifyAll()
- 2. 爲什麼在Java的Object類中聲明wait()和notify()?
- 3. Java的通知(),notifyAll的()和wait()方法
- 4. Java - wait()和notifyAll()
- 5. Java線程wait()notify()方法
- 6. Java wait()&notify()vs Android wait()&notify()
- 7. IllegalMonitorStateException notify()和wait()
- 8. 爲什麼wait()在notifyAll()被調用後無法工作
- 9. 主題:Wait()和notify()
- 10. 使用wait-notify,我的方法有什麼不對嗎
- 11. wait和notify問題
- 12. 什麼是synchronized()/ wait()/ notifyAll()在Java中做什麼?
- 13. 爲什麼等待,通知和notifyAll是Object類中的方法不像Cloneable
- 14. Java - wait and notifyAll
- 15. 使用notify()和notifyAll()在代碼
- 16. Java:Multithreading -Wait/notifyAll問題
- 17. 使用wait()和notifyAll()設置和獲取方法
- 18. 正確使用wait和notify
- 19. Wait(),Notify(),定時器和Jbuttons
- 20. 在多線程中使用wait()和notify()
- 21. 如何在Java中使用wait()和notify()?
- 22. 爲什麼布爾標誌不能用作wait()/ notifyAll()互斥鎖?
- 23. 爲什麼我在使用wait和notify的javaInterThread通信中出現錯誤?
- 24. 爲什麼不調用wait(),notify()或notifyAll()而沒有同步塊而不是編譯器錯誤?
- 25. 在這裏調用'wait'和'notify'
- 26. 爲什麼getResourceAsStream方法在Class類中?
- 27. 如何使用wait/notifyAll
- 28. 調用notifyAll的好方法是什麼?
- 29. 如何正確使用wait和notify方法?
- 30. 除wait和notify之外的另一種同步方法?
的可能重複[?爲什麼等待()和notify()在Java中的Object類中聲明(http://stackoverflow.com/questions/1769489/why-are- wait-and-notify-declared-javas-object-class) – gnat 2013-01-09 11:08:37