Java线程包初探

一、几个类介绍

1.Executor是一个接口,有public void execute(Runnable command)方法

2.Executors是一个工厂类,用于返回相应的Executor实例

3.ExecutorService是Executor的实现类

4.CountDownLatch是一个阻塞计数器,当大于0时阻塞

 

二、以下类实现了一个简单的程序 :主线程创建了许多的ThreadWorker,并让其在不同的线程中执行,然后主线程阻塞,直到所有的ThreadWorker运行完

1.ThreadWorker实现Runnable接口,属于工作类,子类必须实现doWork()方法;当做完工作时,调用CountDownLatch的countDown()方法,将计数减1

2.ThreadExecutor类可以添加ThreadWorker,在调用ExecutorService的execute(Runnable command)后,调用signal.await()使得调用线程阻塞,直到所有的ThreadWorker执行完毕(因为countDown()方法的调用使得计数会减为0)

3.注意:这两个类的CountDownLatch对象要为同一个

4.测试代码

输出:

[pool-1-thread-1]I'm started.
[pool-1-thread-2]I'm started.
[pool-1-thread-4]I'm started.
[pool-1-thread-3]I'm started.
[pool-1-thread-6]I'm started.
[pool-1-thread-5]I'm started.
[pool-1-thread-8]I'm started.
[pool-1-thread-10]I'm started.
[pool-1-thread-7]I'm started.
[pool-1-thread-9]I'm started.
[pool-1-thread-2]I'm finished, elapsed 5s.
[pool-1-thread-1]I'm finished, elapsed 5s.
[pool-1-thread-6]I'm finished, elapsed 5s.
[pool-1-thread-3]I'm finished, elapsed 5s.
[pool-1-thread-5]I'm finished, elapsed 5s.
[pool-1-thread-4]I'm finished, elapsed 5s.
[pool-1-thread-8]I'm finished, elapsed 5s.
[pool-1-thread-10]I'm finished, elapsed 5s.
[pool-1-thread-9]I'm finished, elapsed 5s.
[pool-1-thread-7]I'm finished, elapsed 5s.

==============================================

5.如果不调用ExecutorService的shutdown()方法,因为线程池还存在,因此程序不会退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值