2020年9月15日 线程通信问题(面试题)
2021-03-27 03:25
标签:释放 结束 操作 yield 导致 非静态方法 block 解决 共享数据 1、为了解决“生产者与消费者问题”。 当一些线程负责往“数据缓冲区”放数据,另一个线程负责从“数据缓冲区”取数据。 问题1:生产者线程与消费者线程使用同一个数据缓冲区,就是共享数据,那么要考虑同步 问题2:当数据缓冲区满的时候,生产者线程需要wait(), 当消费者消费了数据后,需要notify或notifyAll 当数据缓冲区空的时候,消费者线程需要wait(), 当生产者生产了数据后,需要notify或notifyAll 2、java.lang.Object类中声明了: (1)wait():必须由“同步锁”对象调用 (2)notfiy()和notifyAll():必须由“同步锁”对象调用 3、面试题:sleep()和wait的区别 (1)sleep()不释放锁,wait()释放锁 (2)sleep()在Thread类中声明的,wait()在Object类中声明 (3)sleep()是静态方法,是Thread.sleep() wait()是非静态方法,必须由“同步锁”对象调用 (4)sleep()方法导致当前线程进入阻塞状态后,当时间到或interrupt()醒来 wait()方法导致当前线程进入阻塞状态后,由notify或notifyAll() 4、哪些操作会释放锁? (1)同步代码块或同步方法正常执行完一次自动释放锁 (2)同步代码块或同步方法遇到return等提前结束 (3)wait() 5、不释放锁 (1)sleep() (2)yield() (3)suspend() 2020年9月15日 线程通信问题(面试题) 标签:释放 结束 操作 yield 导致 非静态方法 block 解决 共享数据 原文地址:https://www.cnblogs.com/douyunpeng/p/13674571.html
文章标题:2020年9月15日 线程通信问题(面试题)
文章链接:http://soscw.com/index.php/essay/68395.html