美文网首页
Java内存模型和并发编程

Java内存模型和并发编程

作者: packet | 来源:发表于2018-07-20 19:45 被阅读0次

计算机两大定律

摩尔定律:CPU晶体管数量的变化趋势

Amdahl定律:并行计算与串行计算的比例来提高效率

计算机体系结构最基本特点是一根总线串联硬件,每个硬件都由控制器和CPU相连。

总线只是把硬件串联起来,但是不能保证这些硬件能协调工作。比如CPU的速度比存取内存,硬件IO和网络IO快得多。

这就需要缓存把各个硬件协调起来。缓存的出现带来了缓存一致性问题。

Java内存模式JMM

每个线程都有自己的工作内存,里面存放主内存数据的副本,线程只是处理工作内存中的副本,然后同步到主内存中去。

并发的三种特性

1)原子性:基本数据类型的访问是需要原子性的,更大范围的原子性则需要锁。

2)可见性:某线程修改某变量,其他变量能及时看到

synchronized, volatile, final

3)有序性:synchronized, volatile(禁止指令重排序优化)


调度:OS为线程分配CPU的使用权

1)协同式调度:线程执行时间由线程自己决定

2)抢占式调度:OS分配线程执行时间

线程安全

1)互斥同步:锁(及其条件变量)

锁的优化:自旋锁(避免线程上下文切换,但自旋时间不好控制),锁的粒度,轻量级锁,

偏向锁

2)无阻塞同步 CAS:依靠硬件指令

缺点是ABA问题,解决方案是AtomicStampedReference类控制变量值的版本。

3)无锁编程:ThreadLocal

相关文章

网友评论

      本文标题:Java内存模型和并发编程

      本文链接:https://www.haomeiwen.com/subject/yxoqmftx.html