面试题答案
一键面试Object
类中的方法:wait()
:调用该方法,当前线程会释放锁并进入等待状态,直到其他线程调用notify()
或notifyAll()
方法唤醒它。在生产者消费者模型中,当缓冲区满时,生产者线程调用wait()
等待消费者消费数据,腾出空间。notify()
:随机唤醒一个在该对象上调用wait()
方法进入等待状态的线程。消费者消费数据后,调用notify()
唤醒可能正在等待的生产者线程。notifyAll()
:唤醒所有在该对象上调用wait()
方法进入等待状态的线程。
BlockingQueue
接口及其实现类:BlockingQueue
:它是一个线程安全的队列,当队列满时,往队列添加元素的操作会被阻塞;当队列空时,从队列获取元素的操作会被阻塞。在生产者消费者模型中,生产者向BlockingQueue
中添加数据,消费者从BlockingQueue
中取出数据,很好地实现了线程同步和数据共享。ArrayBlockingQueue
:基于数组实现的有界阻塞队列,初始化时需要指定队列的容量。LinkedBlockingQueue
:基于链表实现的阻塞队列,容量可以选择指定或不指定,不指定时默认为Integer.MAX_VALUE
。