Java并发(01)-总体概要

2019-06-27  本文已影响0人  小亮__
并发应用

Java 并发问题的产生

Java内存模型(JMM)规定所有的变量都是存在主存当中(类似物理内存),每个线程都有自己的工作内存(类似于高速缓存)。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存,当多个线程同时向主存读取和写入的时候,便会出现并发问题

并发编程中要保证的三个原则

原子性:线程对于内存中的数据的--读取和写入保持原子性
可见性:A线程改变物理内存的值,需要让B线程知道
有序性:代码的执行顺序(因为CUP为了提高代码的执行顺序,会打乱代码的执行顺序,只会保证单线程的最终一致性)

JAVA保证并发编程中的三个概念的机制

happens-before原则

除了上面所说的可以使用volicate和加锁来保证有序性,Java内存模型具备一些先天的“有序性”,即不需要通过任何手段就能够得到保证的有序性,这个通常也称为 happens-before 原则。如果两个操作的执行次序无法从happens-before原则推导出来,那么它们就不能保证它们的有序性,虚拟机可以随意地对它们进行重排序,下面就来具体介绍下happens-before原则(先行发生原则)

synchronized:

详细介绍:https://www.jianshu.com/p/d40eb583f5c4

volatile关键字:

详细介绍:https://www.jianshu.com/p/91f0c6dd2551

Lock:

AQS 机制:

CAS的实现原理:

Atomic工具包

并发工具类--- ThreadLocal

详细地址:https://www.jianshu.com/p/1f61faa88861

并发容器类--- ConcurrentHashMap

并发容器类--- CopyOnWriteArrayList

并发工具类---ThreadPoolExecutors(线程池)

线程池工具类,固定大小线程池,单任务线程池,可变线程池

并发工具类---Semaphore(信号量)

并发工具类---CountDownLatch( 计数器)

并发工具类--- CyclicBarrier

JAVA实现多线程的常用技术阶梯

技术阶梯
上一篇下一篇

猜你喜欢

热点阅读