![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java多线程与高并发
我是刘刘啊
这个作者很懒,什么都没留下…
展开
-
详解Java多线程与高并发(一)__synchronized关键字
synchronized在JDK1.5版本开始,尝试优化。到JDK1.7版本后,优化效率已经非常好了。在绝对效率上,不比reentrantLock差多少。为什么要使用synchronize关键字? 答:这涉及到了多线程的线程同步问题当多个线程访问同一个数据时,容易出现线程安全问题。需要让线程同步,保证数据安全,即当两个或两个以上线程访问同一资源时,需要某种方式来确保资源在某一时刻只...原创 2019-06-15 15:22:48 · 313 阅读 · 0 评论 -
详解Java多线程与高并发(二)__锁的底层实现
锁的底层实现: 由Java 虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现。同步方法 并不是由 monitor enter 和 monitor exit 指令来实现同步的,而是由方法调用指令读取运行时常量池中方法的 ACC_SYNCHRONIZED 标志来隐式实现的。对象内存简图:如上图所示,先介绍几个概念:对象存在jv...原创 2019-06-15 15:57:09 · 315 阅读 · 0 评论 -
详解Java多线程与高并发(三)__volatile关键字
volatile关键字含义:volatile的可见性作用:通知OS操作系统底层,在CPU计算过程中,都要检查内存中数据的有效性。保证最新的内存数据被使用。原理: 如下图所示,程序启动时将磁盘中的字节码文件读到内存中,形成对应的对象和类对象,然后会将对象中的一些变量读到CPU的缓存中作为临时数据。CPU计算时在不中断,清空缓存的情况下,默认使用的时缓存中数据...原创 2019-06-15 16:13:24 · 159 阅读 · 0 评论 -
详解Java多线程与高并发(四)__Atomicxxx
AtomicXxx* 同步类型* 原子操作类型。 Atomicxxx中的每个方法都是原子操作。可以保证线程安全。效果同加synchronize,保证了原子性。如AtomicInteger代码演示如下:public class Test_11 { AtomicInteger count = new AtomicInteger(0); ...原创 2019-06-15 16:42:47 · 741 阅读 · 0 评论 -
详解Java多线程与高并发(五)__CountDownLatch
门闩 - CountDownLatch* 可以和锁混合使用,或替代锁的功能。* 避免锁的效率低下问题。理解:门闩上挂了多把锁,在门闩未完全开放之前(门闩上还有锁)等待。当门闩完全开放后执行。代码演示如下:public class Test_15 { CountDownLatch latch = new CountDownLatch(5); //...原创 2019-06-15 16:48:57 · 263 阅读 · 0 评论 -
详解Java多线程与高并发(六)__ReentrantLock
ReentranLock重入锁类, 实现自Lock接口推荐ReentrantLock,使用相对效率比synchronize高,因为量级较轻使用重入锁,必须必须必须手工释放锁标记。一般都是在finally代码块中定义释放锁标记的unlock方法。上代码lock到unlock,相当于就是synchronize方法的开始到结束public class Test_01 { ...原创 2019-06-15 18:01:05 · 282 阅读 · 0 评论 -
详解Java多线程与高并发(七)__ThreadLocal
线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供了ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。ThreadLocal将值和线程绑定,避免了多线程情况下的数据同步问题,杜绝了线程之间的干扰。底层实现:如何理解ThreadLocal:可以用Java中的Map来帮助我们理解。当前线程Thread.getCurre...原创 2019-06-17 20:03:08 · 319 阅读 · 0 评论