多线程
文章平均质量分 56
为月提笔_
这个作者很懒,什么都没留下…
展开
-
AQS和ReentrantLock的关系
ReentrantLock主要由li大师编写的可重入锁,可以说当时是为了替代synchronized而诞生的,因为synchronized当时是一个重量级锁,消耗性能,可能造成性能的急剧降低,随着后来synchronized的不断的优化,性能逐渐超过ReentrantLock,而ReentrantLock,ReentrantReadWriteLock等锁底层都是基于AQS来实现的。lock.unlock() 需要写在finally块中。synchronized是可以作用与方法,类和代码块,是一个自动加锁原创 2021-01-03 18:17:46 · 869 阅读 · 1 评论 -
2021-01-01 ThreadLocal
不能轻易去锁,导致线程排队,变慢了,导致down机@RestControllerpublic class StatController { static Integer c= 0; synchronized void _add() throws InterruptedException { Thread.sleep(100); c++; } @RequestMapping("/stat") public Integer stat()原创 2021-01-02 22:37:32 · 119 阅读 · 1 评论 -
多线程——线程池介绍和使用
ThreadPoolExecutor来看一下创建ThreadPoolExecutor需要的参数的部分源码,搞得懂这个public ThreadPoolExecutor(int corePoolSize,//核心池子的大小 *重要 int maximumPoolSize,//最大的大小 *重要 long keepAliveTime,//存活时间 T原创 2020-11-17 17:29:13 · 232 阅读 · 0 评论 -
并发——ConcurrentHashMap
前言为什么会有ConcurrentHashMap?我们知道HashMap在单线程情况下么有问题,但是在多线程情况下,在put的时候,如果插入的元素超过了容量(由负载因子决定)的允许范围就会触发扩容操作,就是rehash。将旧数组的内容重新hash到的新的数组中,因为是多线程的环境中,存在着其他的线程也在进行put操作,如果哈希值相同,就出现了两个线程在同一个数组下用链表表示,造成闭环,从而导致get时出现死循环,所以HashMap线程不安全。HashMap死锁原因分析那再来说说HashTable,它是原创 2020-11-17 11:09:27 · 437 阅读 · 0 评论 -
多线程中的proxy代理模式 ,静态代理
从下面的例子可以看到,实现静态代理模式时有三个要素1.真实角色(委托对象)2.代理角色3.共同实现的接口对比以实现Runnable接口的形式创建多线程,可以发现,代理角色Thread类不需要我们创建,我们只需要写委托对象,实现Runnable接口.把委托对象的引用传递给Thread,借助Thread对象来开启线程即可public class proxy { /** * 1.真实角色 * 2.代理角色 * 3.共同实现的接口 * 模拟runable接口原创 2020-11-17 16:30:41 · 340 阅读 · 0 评论