• concurrent-辅助类


    CountDownLatch闭锁

    public class XxxTest {
        /***
         * 伪代码
         */
        CountDownLatch latch = new CountDownLatch(3);//初始化一个数量为3的闭锁
        Thread t1 = new Thread();//开启三个线程
        Thread t2 = new Thread();
        Thread t3 = new Thread();
        t1: latch.countDown();//每个线程的逻辑:给闭锁数量减1
        t2: latch.countDown();
        t3: latch.countDown();
        latch.await();//同时阻塞主线程,直到每个子线程执行完毕
    }
    

    CyclicBarrier栅栏

    public class CyclicBarrierTest2 {
    
        private static int SIZE = 5;
        private static CyclicBarrier cb;
        public static void main(String[] args) {
    
            cb = new CyclicBarrier(SIZE, new Runnable () {
                public void run() {
                    System.out.println("CyclicBarrier's parties is: "+ cb.getParties());
                }
            });
    
            // 新建5个任务
            for(int i=0; i<SIZE; i++)
                new InnerThread().start();
        }
    
        static class InnerThread extends Thread{
            public void run() {
                try {
                    System.out.println(Thread.currentThread().getName() + " wait for CyclicBarrier.");
    
                    // 将cb的参与者数量加1
                    cb.await();
    
                    // cb的参与者数量等于5时,才继续往后执行
                    System.out.println(Thread.currentThread().getName() + " continued.");
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    Semaphore信号量

    
    public class XxxTest {
            public static void main(String[] args) {
                Semaphore sem = new Semaphore(10);//初始化一个大小为10的信号量池子
                Thread t1 = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try{
                            sem.acquire(5);//从信号量池子中申请5个信号量,如果池子余量不够,则等待,直到能申请到后继续往下执行
                        }catch (Exception e){
                        }finally {
                            sem.release();//释放信号量到池中
                        }
                    }
                });
                Thread t2 = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try{
                            sem.acquire(7);//从信号量池子中申请7个信号量,如果池子余量不够,则等待,直到能申请到后继续往下执行
                        }catch (Exception e){
                        }finally {
                            sem.release();//释放信号量到池中
                        }
                    }
                });
                t1.start();
                t2.start();
            }
    }
    
  • 相关阅读:
    sphinx测试数据生成
    sphinx是支持结果聚类的——WHERE、ORDER BY和GROUP BY
    sphinx是支持结果聚类的
    sphinx 针对tedfield搜索
    启明星辰泰合发布新一代日志分析系统
    php下载远程图片方法总结(curl手动解析header)curl跳转问题解决
    php抓取ajax页面返回图片。
    PHP用CURL或fsockopen伪造IP和来路(referer)
    windows无效字符名导致的错误及解决办法
    php 原生或curl获取 http headers
  • 原文地址:https://www.cnblogs.com/yanhui007/p/12587295.html
Copyright © 2020-2023  润新知