![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
清欢渡_丶
清欢渡
展开
-
Java中解决可见性采取的方案
可见性的由来由于CPU、内存、IO设备这三者性能是相差很大的。如果CPU要等待内存,那么就很浪费CPU资源,利用率就很低。所以为了平衡他们之间的差异,最大化的利用CPU资源做出如下努力:1、高速缓存(引来了缓存不一致问题--》CPU层面的解决方法(1、总线锁(性能影响) 2、缓存锁(降低锁的粒度来提高性能)(实现:通过缓存一致性协议)))2、线程和进程(CPU时间片的切...原创 2019-05-19 01:37:48 · 819 阅读 · 0 评论 -
深入AQS
整个分析过程遵循:先了解结构,循序渐进,然后将各部分内容串起来。通过lock接口一步一步引入AQS,了解AQS。lock接口的出现原因:·使用synchronized关键字将会隐式地获取锁,释放锁。整个行为都是隐式进行,不需要干预,所以不灵活·获取到锁的线程没办法相应中断,线程被中断后抛出中断异常释放锁。·没办法指定获取锁的超时时间·....................原创 2019-05-20 18:09:03 · 183 阅读 · 0 评论 -
synchronized
synchronized修饰在实例方法、静态方法,代码块上的区别:1、修饰在实例方法上使用的锁是:this(也就是当前对象的对象头) 修饰在静态方法上使用的锁是:类的class(类加载后存储在方法区中的class对象的对象头)2、如果使用的是this对象:只有当多个线程使用的是同一个对象时,才可以保证线程安全。反例:这两个用的不是同一个锁。 publiccla...原创 2019-05-18 15:39:20 · 121 阅读 · 0 评论 -
wait-notify/notifyAll
先说例子,再说原理。等待/通知机制:在某个条件下等待,当条件满足时,通过它结束等待,继续执行。简单实现:等待方:public class Waiter {public static volatile int flag = 0;public static void setFlag(int flag) {Waiter.flag = ...原创 2019-05-18 19:01:10 · 453 阅读 · 0 评论