wait()方法为什么要放在Object类中?
原因一:Java中,任何对象都可以作为锁,既然wait是放弃对象锁,当然就要把wait定义在这个对象所属的类中。更通用一些,由于所有类都继承于Object,我们完全可以把wait方法定义在Object类中,这样,当我们定义一个新类,并需要以它的一个对象作为锁时,不需要我们再重新定义wait方法的实现,而是直接调用父类的wait(也就是Object的wait),此处,用到了Java的继承。
原因二:有的人会说,既然是线程放弃对象锁,那也可以把wait定义在Thread类里面啊,新定义的线程继承于Thread类,也不需要重新定义wait方法的实现。然而,这样做有一个非常大的问题,一个线程完全可以持有很多锁,你一个线程放弃锁的时候,到底要放弃哪个锁?当然了,这种设计并不是不能实现,只是管理起来更加复杂。
相关推荐
java面试题大全
内含java经典面试题,应有各有,都是精华,面试必过。
为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里?为什么他们必须在同步方法或者同步块中被调用?
线程通信的方法wait()、notify()和notifyAll()被定义在Object类中的原因是因为所有的Java对象都继承自Object类,这使得这些方法可以在任何Java对象上使用,从而实现了多线程间的通信。 wait()方法让当前线程进入等待状态,同时释放对象的锁,直到其他线程调用该对象的notify()或notifyAll()方法来唤醒该线程。notify()方法用于唤醒在该对象上调用wait()方法进入等待状态的一个线程,而notifyAll()方法则唤醒所有在该对象上调用wait()方法进
Microsoft.Net常见问题集锦
以前的面试题目,基础知识基本都 在 Microsoft.Net常见问题集锦
Java并发编程面试题(2022最新版)
Java并发编程面试题(2022最新版)
JAVA程序员面试时32个问题
JAVA程序员面试的32个问题:final, finally, finalize的区别,Static Nested Class 和 Inner Class的不同,说得越多越好...


