java并发

来源:互联网 发布:好用的linux 知乎 编辑:程序博客网 时间:2024/06/05 16:39

1、volatile

如果一个基本变量被volatile修饰,编译器将不会把它保存到寄存器中,而是每一次都去访问内存中实际保存该变量的位置上。这一点就避免了没有volatile修饰的变量在多线程的读写中所产生的由于编译器优化所导致的灾难性问题。所以多线程中必须要共享的基本变量一定要加上volatile修饰符。当然了,volatile还能让你在编译时期捕捉到非线程安全的代码。

2、原子性—sychronized

原子操作(a=0)具有不可分割性;非原子操作是可分割的,存在线程安全问题,需要用同步技术(sychronized)来让它变成一个原子操作。

3、并发容器—CopyOnWrite机制(CopyOnWriteArrayList和CopyOnWriteArraySet)

基本原理:

CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。

应用场景:

用于读多写少的并发场景

缺点:

— 1. 内存占用问题
— 2、数据一致性问题:CopyOnWrite容器只能保证数据的最终一致性,不能保证数据的实时一致性。
CopyOnWrite

4、ReadWriteLock(读写锁接口)

基本定义:

Java.util.concurrent.locks包中还有个ReadWriteLock接口(实现类是ReentrantWriteReadLock),它定义一对锁:读锁和写锁,特征是能够被并发的读取但每次只能有一个写操作。

应用场景:

适用于读多写少的并发场景

使用

使用方法

5、并发容器—ConcurrentHashMap

ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。
ConcurrentHashMap

0 0
原创粉丝点击