![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
新来的程序员
这个作者很懒,什么都没留下…
展开
-
读写锁的使用以及降级优化
一.读写锁特征读写锁的形式如下 ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); Lock readLock = readWriteLock.readLock(); Lock writeLock = readWriteLock.writeLock();1.读读共享 volatile In...原创 2020-04-27 23:13:01 · 266 阅读 · 0 评论 -
ReentrantLock源码来认识AQS
AQSAQS个人理解就是一个有优先级的获取锁的线程队列,用cas高效获取锁,同时通过等待线程的挂起大幅减少cas带来的cpu消耗ReentLock独占模式解析以下只分析了独占模式的lock。//默认实现非公平锁 public ReentrantLock() { sync = new NonfairSync(); }基类:为公平锁和非公平锁提供基本方法 abs...原创 2020-04-26 23:24:05 · 139 阅读 · 0 评论 -
通过FutureTask构建缓存
代码中为了效率一般会构建缓存来提高性能 减少不必要的计算。一般情况下会通过构建一个hashMap来存储缓存比如:Map<String, Object> map = new HashMap<>();public void test(Object param){if (map中不存在param为key的缓存){ 1.//计算........ 2.将计算结果...原创 2019-12-08 17:02:13 · 224 阅读 · 0 评论 -
委托实现线程安全性
1原创 2019-12-02 20:14:59 · 292 阅读 · 0 评论 -
同步工具类
1.闭锁(CountDownLacth)2.futureTask(Callable)3.信号量(Semaphore)4.栅拦(CyclicBarrier)原创 2019-12-02 20:06:02 · 95 阅读 · 0 评论 -
实例封闭保证线程安全以及内置锁和对象锁的思考
如果某对象不是线程安全的 为了保证其线程安全 可以配合代理模式 封闭真实对象的访问权限 在代理方法中添加线程安全的访问方法public class InstancePrivate<K, V> { private Map<K, V> map = new HashMap<>(); public synchronized V put(K key,...原创 2019-10-29 09:16:30 · 110 阅读 · 0 评论 -
vilatile的使用
Volatile:作用:在cpu多核环境下保证多核之间同一份数据的可见性1.在有syn锁的情况下不用volatile。syn的对象锁都是同一个所以保证了各线程的可见性。2.线程安全的不用考虑 因为不涉及到一致性问题3.不依赖于当前状态的写入。虽然不存在线程安全性问题但是也缺少了syn的可见性保证,所以需要volatile提供可见性保证4.需要禁止重排序的问题。比如双重校验锁单例模式 。...原创 2019-08-06 09:28:30 · 272 阅读 · 0 评论