![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 76
b1ngsha
笼中鸟
展开
-
【JUC并发编程】集合类不安全和Callable
在并发下ArrayList不安全,报错java.util.ConcurrentModificationException并发修改异常解决方案。原创 2023-04-17 17:02:55 · 77 阅读 · 0 评论 -
【JUC并发编程】用Condition实现精准唤醒/理解八锁现象
此时先打印打电话,因为static是静态方法,在静态方法中synchronized锁锁的是Phone的Class模版,由于Phone的Class模版全局唯一,所以两线程共用一把锁,发信息线程先获得锁,所以先执行。此时先打印打电话,再打印发信息,因为sendMessage方法中的锁锁的是Class类模版,call方法中的锁锁的是调用者,因此是两把不同的锁。此时先打印打电话,后打印发信息,因为有两个不同的对象,所以有两个调用者,即两把锁,由于sendMessage方法中存在延时,所以先打印打电话。原创 2023-04-12 22:35:18 · 208 阅读 · 1 评论 -
【JUC并发编程】关于锁和虚拟唤醒问题
假设当前有4个线程分别为A,B,C,D,其中A、C线程是生产者,B、D线程是消费者。多线程环境下,有多个线程执行了wait()方法,需要其他线程执行notify()或者notifyAll()方法去唤醒它们,假如多个线程都被唤醒了,但是只有其中一部分是有用的唤醒操作,其余的唤醒都是无用功;而在Lock中,会分情况而定,Lock中有尝试获取锁的方法,如果尝试获取到锁,则不用一直等待。,其中出现了2、3这样的值,显然不符合预期,出现了num重复++的问题,即是虚假唤醒的问题。如果线程A发生阻塞,则线程B会。原创 2023-04-11 17:18:55 · 158 阅读 · 1 评论