java.util.concurrent.CountDownLatch
2016-04-01 09:04
465 查看
java.util.concurrent.CountDownLatch
一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
主要方法
public CountDownLatch(int count);
public void countDown();
public void await() throws
InterruptedException
构造方法参数指定了计数的次数
countDown方法,当前线程调用此方法,则计数减一
awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0
一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
主要方法
public CountDownLatch(int count);
public void countDown();
public void await() throws
InterruptedException
构造方法参数指定了计数的次数
countDown方法,当前线程调用此方法,则计数减一
awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0
public class Recipes_NoLock { public static void main(String[] args) { final CountDownLatch down = new CountDownLatch(1); for(int i=0;i<10;i++){ new Thread(new Runnable() { public void run() { try { down.await(); } catch (InterruptedException e) { } SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss|SSS"); String no = sdf.format(new Date()); System.out.println("订单号:"+no); } }).start();; } down.countDown(); } }
import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.CountDownLatch; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.locks.InterProcessMutex; import org.apache.curator.retry.ExponentialBackoffRetry; public class Recipes_Lock { static String path = "/curator_recipes_lock_path"; static CuratorFramework client = CuratorFrameworkFactory.builder() .connectString("172.18.1.34:2181") .sessionTimeoutMs(5000) .retryPolicy(new ExponentialBackoffRetry(1000, 3)) .build(); public static void main(String[] args) { client.start(); final InterProcessMutex lock = new InterProcessMutex(client, path); final CountDownLatch down = new CountDownLatch(1); for(int i=0;i<10;i++){ new Thread(new Runnable() { public void run() { try { down.await(); lock.acquire(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss|SSS"); String no = sdf.format(new Date()); System.out.println("订单号:"+no); try { lock.release(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start();; } down.countDown(); } }
相关文章推荐
- struts2中<s:select>标签的使用
- Java ConcurrentMap 源码分析
- 详解Java中实现SHA1与MD5加密算法的基本方法
- 20145129 《Java程序设计》第5周学习总结
- java读取文件
- Java中多线程关于wait()和notify()方法的小错误备忘录
- Spring IOC 与AOP
- Java中FileInputStream读写数据时换行处理
- java如何引入接口中定义的常量
- java字符流练习,读文件,将其内容每行倒序写到另一文件
- 经典排序算法(Java版)
- Java Timer 后门
- Eclipse下永久性修改android工程默认包名
- Java 端口映射辅助
- Java并发与多线程(2) 生产者与消费者
- java连接到LDAP
- java线程安全总结(一)
- Spring MVC PageNotFound.noHandlerFound No mapping
- Spring 3中各JAR包的用途说明
- Java编译单元为什么只能有一个public类,而且源文件名必须要与类名相同