java高级---->Thread之Phaser的使用
2017-07-31 09:07
113 查看
Phaser提供了动态增parties计数,这点比CyclicBarrier类操作parties更加方便。它是jdk1.7新增的类,今天我们就来学习一下它的用法。尘埃落定之后,回忆别来挑拨。
一次运行的结果如下:
修改上述的main方法的代码如下:
运行的效果如下:
通过若干个方法来控制多个线程之间同步运行的效果,还可以实现针对某一个线程取消同步运行的效果,而且支持在指定屏障处等待,在等待时还支持中断或非中断等功能,使用Java并发类对线程进行分组同步控制时,Phaser比CyclicBarrier类功能更加强大,建议使用。
Phaser的简单使用
一、Phaser的arriveAndAwaitAdvance方法使用
package com.linux.thread.thread; import java.util.concurrent.Phaser; public class PhaserRun1 { public static void main(String[] args) { Phaser phaser = new Phaser(3); for (int i = 0; i < 3; i++) { ThreadA threadA = new ThreadA(phaser); threadA.start(); } } static class ThreadA extends Thread { private Phaser phaser; public ThreadA(Phaser phaser) { this.phaser = phaser; } @Override public void run() { System.out.println(Thread.currentThread().getName() + " A begin " + System.currentTimeMillis()); phaser.arriveAndAwaitAdvance(); System.out.println(Thread.currentThread().getName() + " A end " + System.currentTimeMillis()); } } }
一次运行的结果如下:
Thread-0 A begin 1501381934550 Thread-1 A begin 1501381934550 Thread-2 A begin 1501381934550 Thread-1 A end 1501381934550 Thread-2 A end 1501381934550 Thread-0 A end 1501381934560
修改上述的main方法的代码如下:
public static void main(String[] args) throws InterruptedException{ Phaser phaser = new Phaser(3); phaser.register(); for (int i = 0; i < 3; i++) { ThreadA threadA = new ThreadA(phaser); threadA.start(); } Thread.sleep(5000); phaser.arriveAndDeregister(); }
运行的效果如下:
通过若干个方法来控制多个线程之间同步运行的效果,还可以实现针对某一个线程取消同步运行的效果,而且支持在指定屏障处等待,在等待时还支持中断或非中断等功能,使用Java并发类对线程进行分组同步控制时,Phaser比CyclicBarrier类功能更加强大,建议使用。
友情链接
相关文章推荐
- java高级---->Thread之ScheduledExecutorService的使用
- java高级---->Thread之Semaphore的使用
- java高级---->Thread之BlockingQueue的使用
- java高级---->Thread之单例模式的使用
- java高级---->Thread之Condition的使用
- java高级---->Thread之Exchanger的使用
- java高级---->Thread之CountDownLatch的使用
- java高级---->Thread之CompletionService的使用
- java高级---->Thread之CyclicBarrier的使用
- js高级编程------------使用prototype仿java对象实现表单验证
- java 使用正则Pattern等实现【搜索 -> 提取 -> 分割 -> 替换】功能
- Java中使用hql,sql查询返回的list<Object> 转成需要的实体对象--方法讲解!
- java学习——ThreadLocal 线程局部 (thread-local) 变量的使用
- 黑马程序员-System.in刚知道java中怎么使用“cin>>”
- <转>学习java反编译工具的使用
- java regex 正则部分高级特性使用
- <转> 面试java高级工程师、项目经理等的常见问题
- java2D使用(2)-->使用Servlet生成JPEG图像
- Java多线程基础使用(Thread|Runable|TimerTask&Timer)