![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
_xuzhi_
从事软件研发
展开
-
ReentrantLock之源码解析
实现锁同步机制,我们一般可以通过 (1) 自旋死循环实现缺点也很明显 空耗cpu (2) 通过自旋加 当前线程调用yied() 释放cpu进入就绪状态,当然这样当下次仍有可能会被选择执行 (3) 通过自旋加 sleep() 让当前线程进入休眠状态 释放cpu , 这样似乎很完美,但是由于持有锁的线程执行时间不确定,可能造成当前线程的频繁唤醒 (4) 通过...原创 2020-04-15 18:31:20 · 356 阅读 · 0 评论 -
显示锁和synchronized的区别
这两种锁都是可重入锁。synchronized内置锁是一种非公平平锁排它锁,是jdk1.8对它做了大量的优化(偏向锁->轻量级锁->重量级锁),所以在没有特殊用途的情况下建议使用synchronized关键字(java语言内置的,加锁释放锁都是已经固化好的我们不需要处理,显示锁是语法层面的锁,有一个固定的范式)。 显示锁有一个固定的结构jdk源码给出的示例...原创 2019-10-08 09:54:33 · 149 阅读 · 0 评论 -
ThreadLocal 详解
ThreadLocal 为每个线程提供一个共享变量的副本 spring中的事务,用ThreadLocal保存一个数据库的连接,执行一次完整的数据库操作。 ThreadLocal内部实现原理:每个线程内部维护一个ThreadLocalMap,元素则是一个个的Entry<key:threadLocal实例,value:共享变量的值>的数组 ...原创 2019-09-27 16:21:23 · 75 阅读 · 0 评论 -
ForkJoin 分而治之思想
ForkJoin 分而治之思想类属于分而治之的算法有:快速排序算法,归并排序,二分法排序,这个三种算法属于分而治之 分而治之将一个大任务拆分成不可再分的小任务,这些小任务相互没有关联可以独立执行 ForkJoinPool.invoke(task)同步等待 ForkJoinPool.submit(task)异步非阻塞有返回值 ForkJoinPool.execut...原创 2019-09-27 16:19:25 · 129 阅读 · 0 评论 -
并发编程 wait()/yield() notify()/notifyAll()
wait() 是对象的方法,当线程获取到改对象的琐时由于条件不满足调用 - object.wait() - 阻塞起来并且释放掉持有的锁yield() Thread中的public static native void yield(); 不会释放锁,由于时间片到了而让出cpu资源,进入就绪状态,并且仍可能获取下一个cpu时间sleep() 不会释放锁,让自身休眠一段时间,当唤醒时继续执行...原创 2019-09-27 14:54:11 · 85 阅读 · 0 评论 -
synchronized 与显示锁 Lock的区别或优缺点
synchronized 和 Lock接口是jdk提供两种实现代码同步的方式,jdk1.8对synchronized 做了大量的优化,比如锁消除,锁粗化,使用偏向锁,轻量级锁、重量级锁、锁自旋等来提高同步的性能。 synchronized 又称为内置锁,支持可重入的非公平锁,使用起来方便也是推荐使用的同步方式。Lock是一个接口,有不同的实现类,基于AbstractQ...原创 2019-08-15 10:26:34 · 330 阅读 · 0 评论 -
CAS 指令导致ABA问题 及 Atomic解决方法 AtomicStampedReference
ABA问题产生本质原因是线程的CAS操作只进行了内容的比较判断而忽视了过程,所以解决ABA问题除了比较内容同时还需要添加版本号的验证(version或者时间戳) 当A线程对正在执行CAS操作时进行比较并且交换操作时,由于时间片时间到了让出CPU,此时B线程获得CPU也执行CAS操作(例如:取出a = 500; a = a + 100; b = a; a = a -10...原创 2019-08-14 15:56:16 · 231 阅读 · 0 评论 -
java基础 - synchronized神来之笔(偏向锁 轻量级锁 重量级锁)
synchronized修饰的同步代码块是通过在代码块前后加入moniterenter和moniterout两条字节码指令实现。当执行moniterenter,获取该对象的moniter使用权,当执行moniterout释放该对象的moniter使用权。 同步方法是通过Class文件的方法表中将该方法的的access_flags字段中的synchronized标识...原创 2019-08-14 14:10:43 · 145 阅读 · 0 评论 -
并发编程之ThreadLocal-内存泄露和线程不安全
ThreadLocal在整个线程的生命周期内有效,为每个线程创建一个变量的副本,从而保证变量的隔离性。 在每个线程内都会维护一个ThreadLocalMap,这个Map内存存放的是一个个Entry(ThreadLocal中定义个一个内部类Entry<key, value>) 他的key是ThreadLocal的弱引用(生命周期仅能存在到下一次垃圾回收之...原创 2019-08-14 11:43:14 · 152 阅读 · 0 评论 -
countdownlantch闭锁和cyclicbarrirer栅栏和semaphore信号量
1、CountdownLatch又叫闭锁 首先CountdownLatch 是一次性的锁。使用后锁状态就消失。 允许一个或多个线程阻塞,等待前置线程执行完后后,即计数器减为零时,阻塞的线程才继续执行。调用await()方法的线程进行阻塞,前置线程调用countDown()计数器减一。2、CyclicBarrier 栅栏锁 CyclicBarrier...原创 2019-08-13 18:09:16 · 372 阅读 · 0 评论