为什么Java把wait与notify放在Object,而不是Thread中?
功能角度
- wait与notify的原始目的,是多线程场景下,某条件触发另一逻辑,该条件对应的直接关系为某种对象,进而对应为Object,其对应为内存资源。
- Thread对应为CPU,与具体条件不是直接关系,Thread是对象的执行依附者。
内存角度
- 线程的同步需要Monitor的管理,其与实际操作系统的重型资源(锁)相关。
- 只有涉及多线程的场景,才需要线程同步,如果wait与notify放在Thread,则每个Thread都需要分配Monotor,浪费资源。
- 如果放在Object,单线程场景不分配Monitor,只在多线程分配。分配Monitor的方法,为检测threadId的不同。