设为首页 加入收藏

TOP

JDK并发包详细总结(五)
2018-06-09 10:07:58 】 浏览:991
Tags:JDK 发包 详细 总结
bsp;     try {
                // 等待所有士兵到期
                cyclic.await();
                doWork();
                // 等待所有士兵完成工作
                cyclic.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                e.printStackTrace();
            }
        }


        void doWork() {
            try {
                Thread.sleep(Math.abs(new Random().nextInt() % 10000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(soldier + " 任务完成!");
        }
    }


    public static class BarrierRun implements Runnable {
        boolean flag;
        int N;


        public BarrierRun(boolean flag, int n) {
            this.flag = flag;
            N = n;
        }


        @Override
        public void run() {
            if (flag) {
                System.out.println("士兵:" + N + "个, 任务完成!");
            } else {
                System.out.println("士兵:" + N + "个, 集合完毕!");
                flag = true;
            }
        }
    }


    public static void main(String[] args){
        final int N = 5;
        Thread[] allSoldier = new Thread[N];
        boolean flag = false;
        CyclicBarrier cyclic = new CyclicBarrier(N, new BarrierRun(flag, N));
        // 设置屏障点, 主要为了执行这个方法.
        System.out.println("集合任务!");
        for (int i = 0; i < N; i++) {
            System.out.println("士兵" + i + " 报到!");
            allSoldier[i] = new Thread(new Soldier(cyclic, "士兵" + i));
            allSoldier[i].start();
        }


    }
}


结果


一个线程阻塞工具, 可以在任意位置让线程阻塞.


与suspend()比较, 如果unpark发生在park之前, 并不会导致线程冻结, 也不需要获取锁.


API


1 LockSupport.park();
2 LockSupport.unpark(t1);


中断响应


能够响应中断,但不抛出异常。


中断响应的结果是,park()函数的返回,可以从Thread.interrupted()得到中断标志


public class LockSupportDemo {
    public static Object u = new Object();
    static ChangeObjectThread t1 = new ChangeObjectThread("t1");
    static ChangeObjectTh

首页 上一页 2 3 4 5 6 7 8 下一页 尾页 5/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java高并发之线程池详解 下一篇Java高并发之无锁与Atomic源码分析

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目