线程间通信方式
2020-11-24 10:33:31 23 举报
AI智能生成
列举线程间通信方式
作者其他创作
大纲/内容
共享内存
volatile
volatile修饰的变量,可以保证多线程可见行, 在条件满足的时候,修改共享变量
弊端:自旋浪费性能
使用
wait/notify
结合Synchronized使用,wait方法释放锁,notify不释放锁
弊端:因为notify不释放锁,所以条件满足后,wait方法也因为获取不到锁,无法从等待状态中出来
使用
CountDownLatch
基于AQS框架,所以相当于是线程间共享变量
使用
Lock/Condition
可以实现精准唤醒,但是signal不会释放锁。await会释放锁
弊端:与wait/notify方法相同,因为signal不释放锁,所以await方法在条件满足时也无法从等待状态中恢复
使用
AtomicInteger
使用方法与volatile类似
消息传递
PipedInputStream/PipedOutputStream管道流
流在两个线程间通信,Java中的Stream是单向的,所以在两个线程中分布建了一个input和output
使用
利用BlockingQueue 阻塞队列
不需要关心何时需要阻塞线程,何时需要唤醒线程,因为这一切BlockingQueue都一手包办了
使用
解决面试问题:有两个线程A、B,A线程向一个集合里面依次添加元素"abc"字符串,一共添加十次,当添加到第五次的时候,希望B线程能够收到A线程的通知,然后B线程执行相关的业务操作
0 条评论
下一页