1. JUC 简介

在 Java 5.0 提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,

用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文中

的 Collection 实现等;

JUC包JUC提供的一些实现:

Atomic : AtomicInteger  原子操作类

Locks : Lock, Condition, ReadWriteLock  可重入读写锁

Collections : Queue, ConcurrentMap 并发集合

Executer : Future, Callable, Executor 线程执行池,异步Future等

Tools : CountDownLatch, CyclicBarrier, Semaphore 减数器,等待器,信号量

2.JUC 核心

java提供了synchonized关键字实现悲观锁机制,以求指令原子性,内存可见性,操作互斥性

但是synchonized锁机制会导致性能下降,控制的颗粒度也粗,所以JUC的核心理念是不通过重量级的synchonized来解决并发问题

我个人理解的JUC三大核心是 :1.volatile 关键字保证内存可见性;

2.CAS(Compare-And-Swap) 算法 保证数据的原子性;

3.AQS队列   (Unsafe类的park操作是调用Posix的信号量互斥量 condition,mutex那套来实现)

AQS的内部队列采用的是CLH队列锁模型,CLH队列是由一个一个结点(Node)构成的。Node类中有两个常量SHARE和EXCLUSIVE,顾名思义这两个常量用于表示这个结点支持共享模式还是独占模式,共享模式指的是允许多个线程获取同一个锁而且可能获取成功,独占模式指的是一个锁如果被一个线程持有,其他线程必须等待。多个线程读取一个文件可以采用共享模式,而当有一个线程在写文件时不会允许另一个线程写这个文件,这就是独占模式的应用场景。

找的一张AQS队列

JUC的各种功能都是通过实现自定义sync类继承AQS(AbstractQueuedSynchronizer)类,sync有公平锁,非公平锁;也可以区分为独占sync,共享sync。AQS源码一半好懂一半晦涩,比如 do{ node.prev = pred = pred.prev; }while(pred.waitStatus >0); 这一段,我也有过空指针疑问,还有比如,为什么要倒序唤醒等等,所以我附上一份个人觉得比较好的AQS源码解读:共享锁:https://www.jianshu.com/p/1161d33fc1d0

独占锁:https://www.jianshu.com/p/71449a7d01af

java juc 包_JUC java并发包相关推荐

  1. java juc包多线程编程案例:Executor入门示例

    * 认识Executor*/ package com.zxl.juc.c_026_01_ThreadPool;import java.util.concurrent.Executor;public c ...

  2. Java.util包,Java的异常处理

    Date 类  Date 类表示日期和时间 提供操纵日期和时间各组成部分的方法 Date 类的最佳应用之一是获取系统当前时间  Date 类构造方法 void display() {          ...

  3. java各种包的用途

    Java 常用包简介 1 . java.lang 包: java 的核心类库,包含了运行 java 程序必不可 少的系统类,如基本数据类型.基本数学函数.字符串处理 . 线 程.异常处理类等,系统缺省 ...

  4. Java中的java.util包

    The java.util package is part of java.base module. This package contains the most important APIs and ...

  5. java JPI中常使用的类介绍即java.lang包下的东西

    java.lang包是java语言的核心,它提供了java中的基础类.包括基本Object类.Class类.String类.基本类型的包装类.基本的数学类等等最基本的类. 下面分别介绍其中比较常用的类 ...

  6. Java编程那些事儿74——java.lang包介绍1

    Java编程那些事儿74--java.lang包介绍1 陈跃峰 出自:http://blog.csdn.net/mailbomb 9.4 JDK API包名综述 在整个JDK API中,大约包含1.2 ...

  7. 总结:java.lang包

    一.介绍 java.lang包是java语言的核心,它提供了java中的基础类.我们使用java.lang包下的类时,是不需要import类的,默认导入. 包括基本Object类.Class类.Str ...

  8. 【Java】浅谈Java的I/O体系

    文章目录 流(Stream) 流的分类 java.io.* I/O体系的四大抽象类 流的分类总结表 流的层次结构图 字节输入流的层次结构图 字节输出流的层次结构图 字符输入流的层次结构图 字符输出流的 ...

  9. Java校招笔试题-Java基础部分(三)

    导语   Java 面试题集2021版 Java基础部分三 26.说说has a 与is a的区别 27.一个房间里有一把椅子,椅子有四条腿,房子和椅子是什么关系,椅子和椅子腿是什么关系? 28.什么 ...

最新文章

  1. PHP 语言结构(Language constructs)和函数的区别
  2. 区块链经济时代得“先机”者得天下!
  3. 《Excel最强功能-数据透视表》 网课笔记
  4. 你还记得当初是怎么对我的吗? | 今日最佳
  5. Struts2从一个action转到另一个action的两种方法
  6. Linux把文件移动到容器外,Docker容器与主机之间拷贝文件的方法
  7. 基于java的数据结构学习——泛型动态数组的封装
  8. 查看文件时间及修改(MACN,stat命令,touch命令)
  9. 牛顿法/拟牛顿法/DFP/BFGS/L-BFGS算法
  10. 长春大学计算机学院招生简章,长春大学招生简章
  11. 串口通信中ReadFile和WriteFile的超时详解!
  12. matlab图形标注名称_matlab入门(三)图像可视化
  13. truffle部署指定的合约到指定网络
  14. win11在桌面添加便签的快捷方式
  15. word2007如何删除尾注分隔符
  16. 普法Android.mk中的一些宏和Android.bp对应关系
  17. 笔记一:领导力是什么
  18. Vue中keep-alive用法
  19. 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】
  20. 物联网平台搭建的全过程介绍(三)阿里云物联网设备接入订阅发布之Android studio例程

热门文章

  1. InputStreamReader和OutputStreamWriter
  2. php sizeof函数,sizeof()的简单介绍
  3. mysql is blocked because of many connection errors
  4. java脚本含义_set -e在bash脚本中的含义是什么?
  5. 外贸业务员会计算机知识,外贸业务员、电子商务
  6. es6标准入门第3版pdf_最详细,快速入门Web前端开发的正确姿势
  7. Vue运行报错webpack-dev-server --inline --progress --config build/webpack.dev.conf.js
  8. 注解@CrossOrigin详解
  9. 运行MYSQL数据库命令时connetion Timeout expired异常问题
  10. webstore忽略指定的文件夹显示