JUC(java.util.concurrent)简介说明
下文笔者讲述java之JUC简介说明,如下所示
JUC简介
JUC
在Java 5.0添加的java.util.concurrent包的简称
包含在rt.jar中
它为了更好的支持高并发任务
让开发者利用这个包进行的
多线程编程时可以有效的减少竞争条件和死锁线程
JUC组成
JUC由以下5部分组成
1.tools 工具类
CountDownLatch:
闭锁
是一个同步辅助类
在完成一组正在其他线程中执行的操作之前
它允许一个或多个线程一直等待
CyclicBarrier:
栅栏
一个同步辅助类
允许一组线程互相等待
直到到达某个公共屏障点
并且在释放等待线程后可以重用
Semaphore:
信号量
是一个计数信号量
它的本质是一个“共享锁“
信号量维护了一个信号量许可集
线程可以通过调用 acquire()来获取信号量的许可;
当信号量中有可用的许可时,线程能获取该许可;
否则线程必须等待,直到有可用的许可为止
线程可以通过release()来释放它所持有的信号量许可
2.atomic原子性包
有AtomicBoolean、AtomicInteger、AtomicIntegerArray等原子变量类
他们的实现原理大多是持有它们各自的对应的类型变量value
volatile关键字修饰
这样来保证每次一个线程要使用它都会拿到最新的值
3.locks锁包
JDK提供的锁机制
相比synchronized关键字来进行同步锁
功能更加强大
它为锁提供了一个框架
该框架允许更灵活地使用锁包含的实现类
有:
ReentrantLock:
它是独占锁
指只能被独自占领
即同一个时间点只能被一个线程锁获取到的锁。
ReadWriteLock:
它包括子类ReadLock和WriteLock
ReadLock是共享锁
WriteLock是独占锁
LockSupport:
具备阻塞线程和解除阻塞线程的功能
并且不会引发死锁。
4.collections并发集合包
ArrayBlockingQueue 阻塞队列 CopyOnWriteArraylist 并发ArrayList, 读多写少场景 CopyOnWriteArraySet,ConcurrentSkipListSet并发HashSet,TreeSet ConcurrentHashMap,ConcurrentSkipListMap并发HashMap,TreeMap
5.Executor 执行者
Java里面线程池的顶级接口
它只是一个执行线程的工具
真正的线程池接口是ExecutorService
FixedThreadPool
线程固定
无界缓冲队列
适用于任务数量不均匀,对内存压力不敏感的场景
CacheThreadPool
不限线程数,适用于短时间要求低延迟的任务场景
SingleThreadPool
适用于异步执行顺序的场景
ScheduleThreadPool
支持固定频率和固定延迟的场景
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


