• 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. }
  • 相关阅读:
    华为云计算IE证书培训费加考试费要2.5左右,值不值得考啊?
    使用 vve-i18n-cli 来一键式自动化实现国际化
    CentOS 7 安装详细教程
    Mysql表的约束
    双因子认证是什么? 安当加密
    显示杂谈(一)Window以及WindowManager
    每天一道算法题(八)——找出字符串中无重复字符的最长子串
    2022年华数杯数学建模
    npm 如何更新项目最新依赖包
    敏捷实践之Bug Bash
  • 原文地址:https://blog.csdn.net/qq_51222096/article/details/126878893