![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
Jerry1ee
这个作者很懒,什么都没留下…
展开
-
Java并发编程(八):线程池与线程调度
线程池与线程调度线程池的好处避免频繁地创建和销毁线程创建了的线程,用完后可以重复利用可以类比数据库连接池理解直接看具体使用代码import java.util.ArrayList;import java.util.List;import java.util.concurrent.*;/** * 一、线程池 :提供了一个线程队列,队列中保存着所有等待状态的线程 * ...原创 2020-03-29 17:04:40 · 238 阅读 · 0 评论 -
Java并发编程(七):ReadWriteLock读写锁与线程八锁
ReadWriteLock读写锁与线程八锁场景什么情况下采用读写锁?写写操作/读写操作 需要互斥读读操作 不需要互斥如果都用独占锁,有时候很多读操作并发时其实并不需要锁住缺上了锁,导致效率低下,可以采用读写锁来代替:import java.util.Random;import java.util.concurrent.locks.ReadWriteLock;import jav...原创 2020-03-29 14:45:54 · 154 阅读 · 0 评论 -
Java并发编程(六):Condition控制线程通信
Condition控制线程通信Condition可以用来控制线程间的通信,与wait、notify和notifyAll方法对应的分别是await、signal和sinalAll上篇文章中的生产者消费者采用的是 synchronized和对象的wait和notifyAll方法,可以采用Lock锁结合condition来代替,具体代码如下:依然是修改Clerk类class Clerk{ ...原创 2020-03-28 15:30:18 · 193 阅读 · 0 评论 -
Java并发编程(五):生产者与消费者之虚假唤醒
生产者与消费者场景生产者不断生成产品,并交给售货员,消费者不断从售货员那里消费产品利用代码实现:public class TestProductorAndConsumer { public static void main(String[] args) { Clerk clerk = new Clerk(); Productor prod...原创 2020-03-28 14:26:39 · 234 阅读 · 0 评论 -
Java并发编程(四):Callable接口与Lock锁
Callable接口与Lock锁Callable接口和Runnable有什么区别?**方法可以有返回值并且能抛出异常使用时需要FutureTask实现类支持,用于接收运算结果可以通过FutureTask来获得线程执行完的最终结果直接看下面一段代码import java.util.concurrent.*;public class TestCallable { publ...原创 2020-03-26 20:21:17 · 507 阅读 · 0 评论 -
Java并发编程(三):并发容器类和辅助类
并发容器类和辅助类Java提供了很多支持并发的容器类,例如我们比较熟悉的用来在并发场景下代替HashMap 的ConcurrentHashMap类:JDK1.8之前 采用“锁分段机制”JDK1.8之后 采用 synchronized 锁住Node节点,结合CAS和volatile实现除此之外,还有:ConcurrentSkipListMap通常优于同步的TreeMap在应...原创 2020-03-26 17:35:21 · 164 阅读 · 0 评论 -
Java并发编程(二):原子变量和CAS算法
原子变量和CAS算法什么是原子性?不可分割的操作,要么全部做了,要么一点也不做i++的原子性问题/** * 实际上i++分为三个步骤 “读-改-写” * int i = 0; * i++; * 实际上的操作: * int tmp = i; * tmp = i+1; * i = tmp; */所以,i++操作并不是原子性的看下面的一段代码:public class M...原创 2020-03-26 13:42:57 · 165 阅读 · 0 评论 -
Java并发编程(一):volatile关键字与内存可见性
volatile关键字与内存可见性为什么要利用多线程?其实就是为了提高效率,尽可能去利用系统/CPU的资源。但使用不当可能会造成性能更低。因为涉及到 线程调度,上下文切换问题,线程创建销毁等问题,所以在用多线程时有许多注意事项。主要关注 JUC包volatile 关键字来看下面一段代码public class TestVolatile { public static voi...原创 2020-03-26 13:12:21 · 182 阅读 · 2 评论