并发编程基础
crazytal
这个作者很懒,什么都没留下…
展开
-
从java中的 AtomicInteger去看cas
我们在之前的文章中介绍过原子性问题。当时我们说过使用synchnorized关键字就可以保证安全。今天我们看看java中为我们提供的另一种实现原子类。我们也AtomicInteger 为例去看看源码。AtomicInteger先看这货的几个属性。unsafe是啥? valueOffset又是干什么的。我们放到后续再聊。通过上面的代码我们清晰的知道这个value 就是存储这个对象当前...原创 2020-03-27 00:22:17 · 284 阅读 · 1 评论 -
扒一扒synchronized的原理
在前面并发容器的学习中我们多次发现代码之中使用了Atomic包下的类,以及synchorized关键字,今天我们就来扒一扒 synchronized 关键字。synchronized 关键字使用的三种场景1.对于普通同步方法,锁是当前实例对象2.对于静态同步方法,锁是当前类的Class对象3.对于同步方法块,锁是Synchronized括号里配置的对象接下来我们来看看synchr...原创 2020-03-26 02:48:59 · 215 阅读 · 0 评论 -
JMM知识点总结(二)
今天来继续总结JMM的其他相关知识,通过上一篇文章我们已经大概知道了多线程情况下某些程序存在可见性问题。什么是可见性定义是:当一个线程修改了共享变量的值,其他线程能够看到修改的值。我们都知道java程序运行时,数据都存储在java运行时数据区(包括,虚拟机栈,方法区,堆,本地方法区,程序计数器等),而我们的可见性问题主要存在于堆。临时变量,或者静态变量,都存在方法区和栈之中都由各个线程独有...原创 2020-03-22 14:19:37 · 215 阅读 · 0 评论 -
JMM相关知识学习总结(一)
Java Memory Model在并发编程中需要处理的两个问题是:线程之间如何同步,以及线程之间如何通信。有两种主流的方案分别是共享内存和消息传递而我们的java采用的就饿时第一种共享内存模型来间接的实现,线程间的通信和同步。为什么需要JMM?让我们看一个简单的demo:这段代码的运行结果如下:可见程序进入了死循环并不能结束,问题出在了哪里呢?我们有两种推测,要么主线...原创 2020-03-21 22:21:20 · 276 阅读 · 0 评论