![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java之并发编程
weixin_40161962
111
展开
-
java并发之集合不安全
集合不安全ArrayList不安全ArrayList的方法没加synchronized关键字,多线程下是不安全的java.util.concurrentModificationError解决方案1 new Vector();2 Collections.synchronizedList(new ArrayList<>());3 new CopyOnWriteArrayLis...原创 2019-11-12 15:34:04 · 93 阅读 · 0 评论 -
java并发之工具类
CountDownLantch允许一个或多个线程等待其他线程完成操作# 读写锁 独占锁读写分离:写一次一个,读可以一起读写操作:必须是原子操作,不能被打断```javaclass Mycache{ ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(); private volati...原创 2019-11-12 15:33:28 · 79 阅读 · 0 评论 -
java并发之死锁
死锁编码以及定位分析产生死锁的原因死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,如果无外力的干涉那它们都将无法推进下去,如果系统的资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。代码public class DeadLockDemo { public static void main(String...原创 2019-11-04 17:01:22 · 120 阅读 · 0 评论 -
java并发之线程池
线程池使用过吗?谈谈对 ThreadPoolExector 的理解?为什使用线程池,线程池的优势?线程池用于多线程处理中,它可以根据系统的情况,可以有效控制线程执行的数量,优化运行效果。线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。主要特点...原创 2019-11-04 17:00:17 · 85 阅读 · 0 评论 -
java多线程创建之实现callable接口
callable使用场景:一千个线程,第996个出错,需要返回错误原因。thread接口不能传callable,为什么?找到一个即实现callable,又和runnable相关的类,传这个类。Futuretask类。class Mythread2 implements Callable<Integer>{ @Override public Integer call() th...原创 2019-11-04 01:01:01 · 97 阅读 · 0 评论 -
java并发之手写生产者消费者模型
1 lock await signal方式class ShareData{ private volatile int number = 0; private int MAX_VALUE = 3; private int MIN_VALUE = 0; Lock lock = new ReentrantLock(); Condition condition = lock.newCondit...原创 2019-11-03 14:58:37 · 219 阅读 · 0 评论 -
java并发之synchronized和lock的比较
1 原始结构synchronized 是关键字属于 JVM 层面,反应在字节码上是 monitorenter 和 monitorexit,其底层是通过 monitor 对象来完成,其实 wait/notify 等方法也是依赖 monitor 对象只有在同步快或方法中才能调用 wait/notify 等方法。Lock 是具体类(java.util.concurrent.locks.Lock)是 ...原创 2019-10-31 22:02:57 · 71 阅读 · 0 评论 -
java并发之阻塞队列
阻塞队列消息中间件底层原理。队列是空时,获取元素操作被阻塞。队列满时,插入元素操作被阻塞。因此,程序员不需要关心何时阻塞或者唤醒线程。阻塞队列共有七种,其中常用的是ArrayBlockingQueue 数组组成的有界阻塞队列LinkedBlockingQueue 链表组成的有界阻塞队列(Integer.MAX_VALUE)SynchronousQueue 单个元素的阻塞队列(生产...原创 2019-10-31 22:00:38 · 88 阅读 · 0 评论 -
java并发之工具类
countdownlanch秦灭六国,阻塞public class CountDownLatchDemo { public static void main(String[] args) { CountDownLatch countDownLatch = new CountDownLatch(6); for(int i = 1; i <= 6; i++) { new Th...原创 2019-10-30 22:34:12 · 53 阅读 · 0 评论 -
volatile关键字学习
volatile## 标题volatile 是 Java 虚拟机提供的轻量级的同步机制,具有三大特性保证可见性禁止指令排序不保证原子性(synchronized可以保证原子性,但效率低)#1 JMM(Java 内存模型)基本概念JMM 本身是一种抽象的概念并不是真实存在,它描述的是一组规定或则规范,通过这组规范定义了程序中的访问方式。要求 可见性 原子性 有序性线程解锁前,必须把...原创 2019-10-19 16:32:38 · 64 阅读 · 0 评论 -
CAS之ABA问题
cas之ABA问题AtomicIntegercas–>unsafe–>cas底层思想–>ABA–>原子引用更新–>如何规避ABA问题。CAS最大问题;ABA问题。CAS算法提取出内存中某个时刻的数据,并在当下时刻比较并替换,这个时间差可能会产生数据的变化。public class ABAdemo { static AtomicReference<In...原创 2019-10-20 11:02:57 · 106 阅读 · 0 评论 -
CAS学习
CAS是什么?CAS是compare and swap。其代码主要位于juc的atomic包下,是用于实现是用于实现多线程同步的原子指令。synchronized是悲观锁,这种线程一旦得到锁,其他需要锁的线程就挂起的情况就是悲观锁。CAS是c语言实现的cpu锁,机制相当于一个乐观锁,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。原理juc的atomic...原创 2019-10-19 20:08:36 · 130 阅读 · 1 评论