为什么等待和通知是在Object类而不是Thread中声明的。

一个棘手的Java问题,如果Java编程语言不是你设计的,你怎么能回答这个问题呢,Java编程的常识和深入了解有助于回答这种棘手的Java核心方面的面试问题。

为什么wait,notify和notifyAll是在Object类中定义的而不是在Thread类中定义。

这是有名的Java面试问题,招2~4年经验的到高级Java开发人员面试都可能碰到。

这个问题的好在它能反映了面试者对等待通知机制的了解,以及他对此主题的理解是否明确,就像为什么Java中不支持多继承或者为什么String在Java中是final的问题一样,这个问题也可能有多个答案。

为什么在Object类中定义wait和notify方法,每个人都能说出一些理由,从我的面试经验来看,wait和nofity仍然是大多数Java程序员最困惑的,特别是2到3年的开发人员,如果他们要求使用wait和notify,他们会很困惑,因此,如果你去参加Java面试,请确保对wait和notify机制有充分的了解,并且可以轻松地使用wait来编写代码,并通过生产者-消费者问题或实现阻塞队列等了解通知的机制。

为什么等待和通知需要从同步块或方法中调用,以及Java中的wait,sleep和yield方法之间的差异,如果你还没有读过,你会觉得有趣,为何wait,notify和notifyAll属于Object类为什么它们不应该在Thread类中以下是我认为有意义的一些想法:。

1)wait和notify不仅仅是普通方法或同步工具,更重要的是它们是Java中两个线程之间的通信机制,对语言设计者而言,如果不能通过Java关键字(例如synchronized)实现通信此机制,同时又要确保这个机制对每个对象可用,那么Object类则是的正确声明位置,记住同步和等待通知是两个不同的领域,不要把它们看成是相同的或相关的,同步是提供互斥并确保Java类的线程安全,而wait和notify是两个线程之间的通信机制。

2)每个对象都可上锁,这是在Object类而不是Thread类中声明wait和notify的另一个原因。

3)在Java中为了进入代码的临界区,线程需要锁定并等待锁定,他们不知道哪些线程持有锁,而只是知道锁被某个线程持有,并且他们应该等待取得锁,而不是去了解哪个线程在同步块内,并请求它们释放锁定。

4)Java是基于Hoare的监视器的思想,在Java中,所有对象都有一个监视器。

线程在监视器上等待,为执行等待,我们需要2个参数:。

一个线程。

一个监视器(任何对象)。

在Java设计中,线程不能被指定,它总是运行当前代码的线程,但是,我们可以指定监视器(这是我们称之为等待的对象),这是一个很好的设计,因为如果我们可以让任何其他线程在所需的监视器上等待,这将导致“入侵”,导致在设计并发程序时会遇到困难,请记住,在Java中,所有在另一个线程的执行中侵入的操作都被弃用了(例如stop方法)。

目前,Java人才的薪资普遍都很高,这些高薪资Java人才的发展方向主要分两类:一是管理人员,如产品研发经理,技术经理,项目经理等,二是高级软件工程师,需求工程师等。

而从上述Java应用领域上来分,主要表现三个方面:一是大中型商业应用,二是桌面应用(常说的c/s应用),三是移动领域应用。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。