• Java~JUC包


     

    目录

    1、同步辅助类

    2,executor(执行者):

    4,locks(锁包) 

    5,collections(集合类):


    JUC是java.util.concurrent包的简称,在Java5.0添加,目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题!

    1、同步辅助类

    1)CountDownLatch闭锁是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
    2)CyclicBarrier栅栏之所以叫barrier,是因为是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 ,并且在释放等待线程后可以重用。
    3)Semaphore信号量是一个计数信号量,它的本质是一个共享锁。信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可。

    2,executor(执行者):

    Java里面线程池的顶级接口,但它只是一个执行线程的工具,真正的线程池接口是ExecutorService,里面包含的类有:

    1)ScheduledExecutorService 解决那些需要任务重复执行的问题

    2)ScheduledThreadPoolExecutor 周期性任务调度的类实现

    3,atomic(原子性包):是JDK提供的一组原子操作类,

    包含有AtomicBoolean、AtomicInteger、AtomicIntegerArray等原子变量类,他们的实现原理大多是持有它们各自的对应的类型变量value,而且被volatile关键字修饰了。这样来保证每次一个线程要使用它都会拿到最新的值。

    4,locks(锁包) 

    是JDK提供的锁机制,相比synchronized关键字来进行同步锁,功能更加强大,它为锁提供了一个框架,该框架允许更灵活地使用锁包含的实现类有:

     1)ReentrantLock 它是独占锁,是指只能被独自占领,即同一个时间点只能被一个线程锁获取到的锁。

    2)ReentrantReadWriteLock 它包括子类ReadLock和WriteLock。ReadLock是共享锁,而WriteLock是独占锁。

    3)LockSupport 它具备阻塞线程和解除阻塞线程的功能,并且不会引发死锁。

    5,collections(集合类):

    主要是提供线程安全的集合, 比如:

    1)ArrayList对应的高并发类是CopyOnWriteArrayList,

    2)HashSet对应的高并发类是 CopyOnWriteArraySet,

    3)HashMap对应的高并发类是ConcurrentHashMap等

    1. package com.yan4;
    2. import java.util.concurrent.CountDownLatch;
    3. public class Test2 {
    4. public static void main(String[] args) {
    5. CountDownLatch latch = new CountDownLatch(10);
    6. System.out.println(latch.getCount());
    7. for (int i = 0; i < 10; i++) {
    8. Thread t = new Thread(() -> {
    9. System.out.println(Thread.currentThread() + "开始");
    10. try {
    11. Thread.sleep(500);
    12. } catch (InterruptedException e) {
    13. e.printStackTrace();
    14. }
    15. latch.countDown();// 计数器减1
    16. System.out.println(Thread.currentThread() + "结束");
    17. });
    18. t.start();
    19. }
    20. try {
    21. latch.await();// 阻塞主线程,直到计数器值为0时才会继续执行
    22. } catch (InterruptedException e) {
    23. e.printStackTrace();
    24. }
    25. System.out.println("最终执行结果:");
    26. System.out.println(latch.getCount());
    27. }
    28. }
  • 相关阅读:
    随笔:想写一本数据结构的书
    毕业工具大全:开题、答辩、格式排版等&stata、spss等多种统计软件、绘图软件(附送教学视频)超200G资料
    最后写入胜利(丢弃并发写入)
    [Linux] DHCP网络
    vue前后端分离单点登录,结合长token和短token进行登录
    android动画的学习与总结
    直播美颜技术的技术背后:美颜SDK的原理与实践
    机器学习算法 —— 1. K近邻算法
    汽车减速器设计及三维建模
    【Maven学习】3.6 实验六:测试依赖的范围
  • 原文地址:https://blog.csdn.net/qq_51222096/article/details/126878893