![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线程
文章平均质量分 86
宋丹尼尔
不相信莫名其妙的事情
展开
-
java.util.concurrent 包下的常见类(JUC)
1、ReentrantLock可重入互斥锁注意事项:a) lock() 写在try之前。防止没有枷锁成功,影响正常逻辑调试。b)一定要记得在finally里面进行unLock()。2、信号量一个计数信号量,主要用于控制多线程对共同资源库访问的限制。着重说两个方法:acquire()void:尝试获取锁,如果可以正常获取到,则执行后面的业务逻辑,如果获取失败,则阻塞等待。release() void:释放锁这里用停车场的思想来演示一下:import java.util.Random;i原创 2021-05-31 20:27:20 · 299 阅读 · 2 评论 -
锁策略总结
乐观锁乐观锁:它认为一般情况下不会发生并发冲突,所以只有在进行数据更新的时候,才会检测并发冲突,如果没有冲突,则直接修改,如果有冲突,则返回失败。CAS(Compare And Swap 比较并且交换):V(内存值)A(旧值)B(新值)具体流程:V==A?true(没有并发冲突)->V=B; : false(并发冲突)线程的解决方案:加锁、ThreadLocal、Atomic*乐观锁 Atomic*我们先来看一个示例:public class ThreadDemoGJ1 {原创 2021-05-28 19:43:29 · 135 阅读 · 1 评论 -
单例模式与自定义阻塞队列
提升程序性能的方法1、多线程2、单例模式:整个程序的运行中,只存在一个对象。饿汉方式:上来不管啥先创建一个对象再说。(不用加锁也是线程安全的)懒汉方式:当程序启动之后并不会初始化,而是在什么时候调用,什么时候再初始化。设计模式:1、单例模式(手写)2、工厂模式(简单工厂、抽象工厂)3、模板模式…饿汉方式public class ThreadDemoEH1 { static class Singleton{ //1、创建私有的构造函数(为了防止其他类直接创建)原创 2021-05-28 17:58:43 · 183 阅读 · 0 评论 -
ThreadLocal
线程解决方案1、 加锁加锁⽅案虽然可以正确的解决线程不安全的问题,但同时也引⼊了新的问题,加锁会让程序进⼊排 队执⾏的流程,从⽽⼀定程度的降低了程序的执⾏效率,那有没有⼀种⽅案既能解决线程不安全的 问题,同时还可以避免排队执⾏呢?2、ThreadLocal(ThreadLocal 线程本地变量 :线程级别的私有变量,与任务级别的私有变量完全不同)ThreadLocal经典实用场景:1、解决线程安全问题2、实现线程级别的数据传递ThreadLocal使用1、set(T):将私有变量存放到线程原创 2021-05-28 17:19:39 · 94 阅读 · 0 评论 -
线程池的创建
线程的缺点1.线程的创建需要开辟内存资源:本地方法栈、虚拟机栈、程序计数器等线程私有变量的内存。频繁的创建和销毁,会带来一定的性能的开销。2、使用线程不能很好的管理任务和友好的拒绝任务。所有就引入了线程池这一技术。线程池线程池定义:使用池化技术来管理和使用线程的技术。这种技术就叫线程池。线程池里面的重要内容:1、线程2、任务队列线程池的执行流程:当拿到一个任务之后,会判断当前线程池里面的数量是否达到了最大值,如果没有达到创建新的线程执行任务;当任务来了之后,线程池的线程数量已经是最大值,并原创 2021-05-24 11:35:37 · 236 阅读 · 1 评论