java并发工具包

  • Semaphore
    经典的信号量,通过计数器控制对共享资源的访问
    semaphore(int count):/创建拥有count个许可证的信号量
    accquire()/accquire(int num):获取1/num个许可证
    release()/release(int num):释放1/num个许可证
    例:两个银行柜员(即两个许可证,最多允许两个线程进入共享区域)办理三个客户业务
  • CountDownLatch
    计数器,必须发生指定数量的事件后才可以继续运行
    CountDownLatch(int count):必须发生count个数量才可以打开锁存器
    await():等待锁存器
    countDown():触发事件,即-1
    例:赛跑比赛,运动员先await()等待,然后执行countDown()方法直到count为0时,开始跑
    线程依赖于计数器的计数
  • CyclicBarrier
    循环屏障:适用于只有多个线程都到达预定点时才可以继续执行
    CyclicBarrier(int num):等待线程的数量
    CyclicBarrier(int num,Runnable action):等待线程的数量以及所有线程到达后的操作
    await():到达临界点后暂停线程
    例:斗地主,三个人await()等待人到齐了才开始游戏
  • Exchanger
    交换器:简化两个线程间数据的交换
    Exchanger:指定进行交换的数据类型
    V exchange(V object):等待线程到达,交换数据
  • Phaser
    工作凡是与CyclicBarrier类似,但是可以定义多个阶段
    Phaser()/Phaser(int num):使用指定0/num个party创建Phaser
    register():注册party
    arriveAndAwaitAdvance():到达时等待所有party到达
    arriveAndDeregister():到达时注销线程自己
    例:工作线程注册到Phaser,没有处理完调用arriveAndAwaitAdvance(),所有任务处理完之后调用arriveAndDeregister,调用线程同理
  • Fork/Join
    分而治之策略:将任务递归划分成更小的子任务,直到子任务足够小,从而能够被连续的处理掉为止
    优势:处理过程可以使用并行发生,这种情况特别适合基于多核处理器的并行编程
    根据Java API中定义,分而治之的建议临界点定义在100-1000(阀值)个操作中的某个位置
    主要类:
    ForkJoinTask:描述任务的抽象类
    ForkJoinPool:管理ForkJoinTask的线程池
    RecursiveAction:ForkJoinTask子类,描述无返回值的任务
    RecursiveTask:ForkJoinTask子类,描述有返回值的任务
    例:继承RecursiveTask类,重写compute()方法,当小于阀值时,不需要再拆分,直接处理,否则按照业务逻辑用该类对象进行拆分,子类对象.fork()分离,子类对象.join()合并结果,最后通过ForkJoinPool对象.submit(子类对象)方法来调用,Future封装返回值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值