您的位置:首页 > 编程语言 > Java开发

Java并发常见概念总结

2017-05-26 15:03 211 查看

Java并发

互斥锁(重量级锁)

synchronized

对象锁

不可中断

可重入

非公平

相关操作

wait/waitAll/notify/notifyAll
synchronized(object){

while(等待条件不满足){

object.wait();

}

}

ReentrantLock

可重入

可中断

分支主题

公平可设置

相关操作

condition,需要满足同一个条件的所有对象,等待同一个condition
Lock lock = new ReentrantLock();

Condition condition = lock.newCondition();

lock.lock();

try{

while(条件不满足){

condition.await();

}

访问共享资源

condition.signal();

}finally{

lock.unlock();

}

ReentrantReadWriteLock

公平可设置

可重入

读共享,写互斥

读锁升级,先解锁(防死锁);写锁降级,先加锁(确保锁不丢)

自旋锁(轻量级锁)

CAS

例: AtomicInteger

偏向锁

单一线程访问同步块的场景

已有的锁被标记,不用再加锁与解锁

mark world

对象头标记区

锁标记

多线程共享变量的可见性

volatile

每次强制线程从共享内存中获取变量;更新时,也强制更新至共享内存

仅保证可见性,不保证原子性

AtomicIntegerFieldUpdaterCounter

将已有成员变量封装,使其具备原子性

死锁(抢资源导致)

一个线程同时使用两把以上的锁,就有死锁隐患

活锁(让资源导致)

其他工具

CountDownLatch

多个主线程倒计数等待子线程完成,多个主线程可继续

Latch“门闩"。开门都让大家通过,然后再关门

CyclicBarrier

主线程一直准备,设置障碍。等到指定数量子线程都到达障碍处等待,再移除障碍,使得子线程继续。

整理脑图:http://naotu.baidu.com/file/4d56449fad26594909d45e3ce962d948?token=e7e3331c75767b40
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: