![](https://img-blog.csdnimg.cn/20200404095200644.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
java并发基础(下载管理中有对应的知识纲图)
文章平均质量分 95
以并发三大根源问题(可见性,有序性,原子性),展开java应对并发问题的各种做法happend-before,final,volatile,synchronized,以及java的生命周期展开介绍。
qq_599571116
这个作者很懒,什么都没留下…
展开
-
并发编程下的三大问题根源(原子性,可见性,有序性)和各种并发问题
本篇不讲解决方式,只是提出并发编程的问题,下面看一下并发问题的结构问题根源:可见性,原子性,有序性。缓存导致的可见性问题结合上图来看一下可见性问题int count=0Thread th1 = new Thread(()->{ count+=1000; });Thread th1 = new Thread(()->{ count+=1000; });count=?直...原创 2020-03-08 14:15:09 · 507 阅读 · 0 评论 -
JAVA如何解决可见性和有序性--java内存模型(Happens-Before规则,volatile,synchronized,final)
大家都知道java并发的三大根源性问题:可见性,有序性,原子性。那么java是如何解决的呢?今天先来说JAVA如何解决其中的可见性和有序性问题,导致可见性的原因是缓存,导致有序性的原因是编译优化。那么我们只要按需禁用缓存和编译优化就可以了。JAVA推出了JAVA内存模型,JAVA内存模型规范了JVM提供按需禁用缓存和编译优化的方法。具体来说,就是volatile,synchronized,f...原创 2020-03-19 15:48:09 · 453 阅读 · 1 评论 -
JAVA如何解决原子性问题-锁:资源
上篇文章我们讲解了可见性和有序性在JAVA中如何解决。那原子性问题如何解决呢?导致原子性的原因是线程切换,当一个线程对共享变量进行读写操作时,没有执行完,切换到另外一个线程对该共享变量进行读写。比如下面经典的count++问题。那么我们只要禁止线程切换不就解决这个问题了,而操作系统的线程切换依赖CPU中断的,所以禁止CPU发生中断就可以禁止线程切换。在单核CPU下禁止中断就可以禁止线程切...原创 2020-03-17 09:31:30 · 394 阅读 · 1 评论 -
java线程基础-生命周期,创建合适线程数,局部方法安全性
java线程线程生命周期通用的线程生命周期java线程的生命周期那么stop和interrupt的区别?创建多少线程才是合适的局部变量是线程安全的线程生命周期首先先来介绍线程通用生命周期通用的线程生命周期初始状态:线程被创建(仅仅是编程语言层面,操作系统还没有创建真正的线程),不允许CPU分配资源。可运行状态:线程可以分配CPU执行,(操作系统层面已经创建线程了)运行状态:操作系统...原创 2020-03-15 10:08:22 · 108 阅读 · 0 评论 -
【管程模型-互斥】:synchronized原理
管程-synchronized什么是管程?管程模型-MESA 模型管程模型的区别简易版 MESA 模型synchronized什么是管程?所谓管程,指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。用java来说,管理一个类的成员变量和成员方法,使之成为线程安全的类。synchronized关键字和wait(),notify()和notifyall()都是管程的组成部分。管程模型...原创 2020-03-19 11:25:37 · 805 阅读 · 0 评论 -
synchronized的实现原理
synchronizedsynchronized的三种用法:synchronized的实现java对象头CAS自旋偏向锁轻量级锁synchronized的三种用法:对于普通同步方法,锁是当前的实例对象对于static同步方法,锁是当前class对象对于同步代码块,锁是()中配置的对象当一个线程访问同步代码块时,它必须获得锁,在退出或者抛出异常时必须释放锁。synchronized的...原创 2020-03-20 20:45:52 · 268 阅读 · 0 评论