【校招VIP】java语言考点之wait、notify和notifyAll

91 阅读2分钟

考点介绍:

wait、notify和notifyAll在大厂校招面试中是常考点,这三个方法由于需要控制对对象的控制权(monitor),所以属于object而不是属于线程三者间的区别及使用方法等都需要熟练掌握。

一、考点试题

1、wait()和sleep()的区别

解答:sleep来自Thread类,和wait来自Object类,调用sleep()方法的过程中,线程不会释放对象锁。而 调用 wait 方法线程会释放对象锁......

2、Notify和notifyAll的区别(阿里面试题)

解答:由图可知

进入等待队列后,会由notify或notifyAll唤醒 当你调用notify时,只有一个等待线程会被唤醒而且它不能保证哪个线程会被唤醒,这取决于线程调度器......

3、为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?

解答:Java中,任何对象都可以作为锁,并且 wait(),notify()等方法用于等待对象的锁或者唤醒线程......

4、wait/notify会带来哪些问题?

解答:1.过早唤醒问题

等待线程W和通知线程N都为同步对象someObject锁线程,如果通知线程N3更新好了共享变量......

二、考点文章

1、Java多线程学习之wait、notify/notifyAll 详解

wait()、notify/notifyAll() 方法是Object的本地final方法,无法被重写......

2、notify() 和 notifyAll() 有什么区别?

先解释两个概念。

1、等待池:假设一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁后,进入到了该对象的等待池,等待池中的线程不会去竞争该对象的锁。

......

3、Java的wait(), notify()和notifyAll()使用小结

wait(),notify()和notifyAll()都是java.lang.Object的方法:

......

三、考点视频

多线程中sleep()和wait()方法的区别

1 所属类不同

sleep是线程类Thread的静态方法,wait是object类的普通方法......

image.png