线程阻塞之join和CountDownLatch的简单使用

介绍

通常使用线程的时候,我们很少需要去阻塞线程,一般通过回调返回数据既可,但是有些场景比方说,线程中需要等待另外一个线程的结果,这时候我们就可以通过显示地去阻塞线程,等待线程结束获得数据。一般可以使用CountDownLatch
或者线程的join方法进行线程的同步阻塞。线程阻塞的一些知识可以查看这篇文章

使用

join方法,代码如下

        private void blockByJoin() {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("the thread block by join");
        }
        });
        thread.start();

        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("join end");
    }
通过join方法,使调用thread的线程阻塞直到thread线程终止,就可以得到预期结果,
the thread block by join
join end

使用CountdownLatch,如下:

   private void blockByCountDown() {
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("the thread block by countdownLatch");
                countDownLatch.countDown();
            }
        }).start();

        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("countdownLatch end");
    }

CountDownLatch通过内置一个线程数量计数器,需要同步多少个线程,构造方法则传入对应的数量,接着在需要阻塞线程的地方调用await方法,在释放线程的地方调用countDown方法既可。相比较于join方法,CountDownLatch的优势在于不需要等待线程死亡才释放,可以在满足条件的地方调用countDown方法就可以让计数减一,相比较于join更灵活可控一些。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值