![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程
迷途知返-
这个作者很懒,什么都没留下…
展开
-
Java多线程(9)ReentrantLock原理
上篇:Java多线程(8)线程池ReentrantLock原理继承关系ReentrantLock 在内部用了内部类 Sync 来管理锁,所以真正的获取锁和释放锁是由 Sync 的实现类来控制的。Sync 有两个实现,分别为 NonfairSync(非公平锁)和 FairSync(公平锁)。默认是非公平锁public ReentrantLock() { sync = new NonfairSync();}一. 加锁流程假设有两个线程,Thread-0和Thread-1,竞争同一个原创 2020-11-13 18:25:35 · 158 阅读 · 0 评论 -
Java多线程(8)线程池
上一篇:Java多线程(7)手写线程池JDK线程池 ThreadPoolExecutor多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力,但频繁的创建线程的开销是很大的,那么如何来减少这部分的开销了,那么就要考虑使用线程池了。线程池就是一个线程的容器,每次只执行额定数量的线程,线程池就是用来管理这些额定数量的线程。一. 线程池状态...原创 2020-11-11 23:06:00 · 128 阅读 · 0 评论 -
Java多线程(7)手写线程池
上一篇:Java多线程(6)CAS详解手写线程池一. 线程阻塞获取任务1. 编写任务队列 以生产者和消费者模型来实现class TaskQueue<T> { // 1. 任务队列实例 private Deque<T> queue = new ArrayDeque<>(); // 2. 任务队列大小 private final static int queueSize = 10; // 3. 锁 private Ree原创 2020-11-08 17:17:37 · 339 阅读 · 2 评论 -
Java多线程(6)CAS详解
上一篇:Java多线程(5)JMM详解CAS一. CAS 是什么CAS是CompareAndSwap(也可以是CompareAndSet)的简称,从字面上理解就是比较并更新,简单来说:从某一内存上取值V,和预期值A进行比较,如果内存值V和预期值A的结果相等,那么我们就把新值B更新到内存,如果不相等,那么就重复上述操作直到成功为止,看下面代码这个代码在多线程下是线程安全的,AtomicInteger内部并没有用锁来保护共享变量的线程安全。那么它是如何实现的呢?CAS 的底层是 lock cmpxch原创 2020-11-06 21:53:15 · 682 阅读 · 2 评论 -
Java多线程(5)JMM详解
上一篇:Java多线程(4)ReentrantLock详解原创 2020-10-30 18:36:31 · 166 阅读 · 0 评论 -
Java多线程(4)ReentrantLock详解
上一篇:Java多线程(4)线程活跃性问题ReentrantLock详解一. 什么是ReentrantLockReentrantLock称为重入锁,比内部锁synchonized拥有更强大的功能,它可中断、可定时、设置公平锁使用ReentrantLock时,一定要释放锁,一般释放放到finnal里写...原创 2020-10-29 22:02:44 · 393 阅读 · 1 评论 -
Java多线程(3) wait、notify 详解
上一篇 :Java多线程(2)synchronized详解wait、notify / notifyAll一. 对于wait()和notify()、notifyAll的理解对于wait()和notify()的理解,还是要从jdk官方文档中开始,在Object类方法中有void notify()Wakes up a single thread that is waiting on this object’s monitor.译:唤醒在此对象监视器上等待的单个线程void notifyAll原创 2020-10-27 11:48:22 · 295 阅读 · 0 评论 -
Java多线程(2)synchronized详解
上一篇:Java多线程(1)线程与进程synchronized详解简介可能在很多人眼里,在java中提到 锁、安全性、同步,首先想到的则是java提供的大佬(synchronized)。那么为什么在多线程下,单单靠一个关键字修饰代码块就可以实现所谓的安全性呢?可以说是对初学者而言及神奇又强大的存在。也成了大多数初学者百试不爽的良药但是在逐渐对java认知的深入,我们认识到synchronized对于jvm来说是一个重量级的锁。其笨重无比,在如今人们对速度和性能极致要求的现在,现在此时并不能满足性能上原创 2020-10-23 00:57:20 · 291 阅读 · 2 评论 -
Java多线程(1)线程与进程
多线程作为Java中很重要的一个知识点,在此还是有必要学习一下的线程与进程进程 是程序的一次动态执行过程,它需要经历从代码加载,代码执行到执行完毕的一个完整的过程,这个过程也是进程本身从产生,发展到最终消亡的过程。多进程操作系统能同时达运行多个进程(程序),由于 CPU 具备分时机制,所以每个进程都能循环获得自己的CPU 时间片。由于 CPU 执行速度非常快,使得所有程序好像是在同时运行一样,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程线程是指进程中的一个执行原创 2020-10-21 00:46:19 · 192 阅读 · 0 评论