zoukankan      html  css  js  c++  java
  • Java并发常见概念总结

    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

  • 相关阅读:
    php 人员权限管理(RBAC)
    CSS3的@keyframes用法详解
    phpcms安装与使用
    PDO 数据访问抽象层
    ajax的分页查询
    php 增删改查范例(3)
    php 增删改查范例(2)
    maven部署项目流程(区分环境)
    springboot分环境打包(maven动态选择环境)
    Guava Cache -- MapMaker.makeComputingMap测试
  • 原文地址:https://www.cnblogs.com/daition/p/6908563.html
Copyright © 2011-2022 走看看