博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java_线程-锁
阅读量:6240 次
发布时间:2019-06-22

本文共 2285 字,大约阅读时间需要 7 分钟。

package com.demo.test3;import java.util.concurrent.CountDownLatch;/** * @author QQ: 1236897 * *///闭锁//nThread - 线程数目//startGate -确保所有线程就绪-》countDown->所有线程工作//endGate - 等待所有线程完成工作后才返回timeTask方法public class CountDownLockTest {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        Caller caller = new Caller();        MyTask task = new MyTask();        try {            System.out.println(caller.timeTask(5, task));        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}class Caller {    public long timeTask(int nThreads, final Runnable task)            throws InterruptedException {        final CountDownLatch startGate = new CountDownLatch(1);        final CountDownLatch endGate = new CountDownLatch(nThreads);        for (int i = 0; i < nThreads; i++) {            Thread t = new Thread() {                public void run() {                    try {                        System.out.println("startGate await");                        startGate.await();                        try {                            task.run();                        } finally {                            endGate.countDown();                        }                    } catch (InterruptedException e) {                    }                }            };            t.start();        }        long start = System.nanoTime();        System.out.println("startGate countDown");        startGate.countDown();        endGate.await();        long end = System.nanoTime();        System.out.println("return");        return end - start;    }}class MyTask implements Runnable {    /*     * (non-Javadoc)     *      * @see java.lang.Runnable#run()     */    @Override    public void run() {        // TODO Auto-generated method stub        System.out.println("id sleep: - " + Thread.currentThread().getId());        try {            Thread.sleep(5000);            System.out.println("Sleep done: - "                    + Thread.currentThread().getId());        } catch (InterruptedException e) {            // TODO Auto-generated catch block            Thread.currentThread().interrupt();        }    }}

 

转载于:https://www.cnblogs.com/MarchThree/p/4769858.html

你可能感兴趣的文章
Scheme来实现八皇后问题(1)
查看>>
pip或者anacnda安装opencv以及opencv-contrib
查看>>
Unity 5 中的全局光照技术详解(建议收藏)
查看>>
python 的矩阵运算——numpy
查看>>
处理handler中的内存泄漏
查看>>
P8 Visible Lattice Points
查看>>
小小不爽一下
查看>>
【转】NuGet学习笔记(1)——初识NuGet及快速安装使用
查看>>
Python学习笔记 - MySql的使用
查看>>
WebApi FormData+文件长传 异步+同步实现
查看>>
Linux文件与目录管理
查看>>
多态的弊端
查看>>
Spring @Import 注解
查看>>
PBOC APDU命令解析【转】
查看>>
封装HttpUrlConnection开箱即用
查看>>
第二天笔记
查看>>
如何在外部终止一个pengding状态的promise对象
查看>>
初级模拟电路:1-5 二极管的其他特性
查看>>
《简明Python教程》Swaroop, C. H. 著 第1章 介绍
查看>>
Chapter 4. Working with Key/Value Pairs
查看>>