• 并发工具类


    使用同步工具类

    闭锁

    在线程执行过程中用一把锁把门锁住,在开锁之前线程无法通过这道门,只有当满足了开锁的条件之后,锁才会自动打开。

    常用的闭锁工具类:CountDownLatch、CyclicBarrier、FutureTask。

    闭锁应用场景

    1.有a、b、c三个线程一起执行,可是a线程需要等待b、c线程任务执行完毕才继续往下执行。

    2.一个线程的某步计算依赖于其它线程的执行结果。

    用生活例子举例,小明约小张和小李吃饭,小明先到了,可是要等到小张和小李都到齐才能开始点菜吃饭,小明到饭店后等待小张小李到齐的这个步骤就是一个闭锁,小张和小李到齐是闭锁的两个开锁条件,只有满足了开锁条件,才能够继续点菜吃饭,否则只能干坐着等待。

    1111.png
    输出结果:
    2222.png

    以上demo便完成了一个闭锁的使用,十分简单。CyclistBarrier的使用也和上面十分相似。

    信号量

    主要用来控制并发量,也可以用来实现指定长度的队列。

    下面用Semaphore来实现一个多线程变单线程的例子。

    这是一个线程不安全的计数demo,由于多线程线程并发执行时的cpu执行时序影响,结果十分混乱。

    3333.png

    4444.png

    可以用Semaphore使这个计数任务变成串行执行,把并发量设为1,同时只有一个线程执行计数操作。
    5555.png

    由于是单线程执行,自然就不存在线程安全问题了。(当然不推荐用这种方式解决线程安全问题,只是用来演示信号量工具类Semaphore的用法)

    6666.png

  • 相关阅读:
    前端技术学习路线及技术汇总
    周末学习笔记——B/S和C/S的介绍
    前端个人笔记----------vue.js
    js中闭包来实现bind函数的一段代码的分析
    零碎总结
    最近要做的事
    递归中的返回
    近期写js库中遇到的一个判别的问题
    js中函数的写法
    关于异步回调的一段代码及相关总结
  • 原文地址:https://www.cnblogs.com/powerjiajun/p/11564169.html
Copyright © 2020-2023  润新知