JAVA基础:Java线程池在使用中的问题实例解答
Java线程池需要我们不竭的进修,其实我们在使用的时辰仍是有不少问题需要我们解决。我们实现了一个简单的Java线程池。此刻我们就可以使用它了,下面的代码做了一个简单的示例:Java代码
1.public class SimpleTaskTest extends Task {
2.@Override
3.public void deal() {
4.// do something
5.}
6.public static void main(String[] args) throws InterruptedException {
7.ThreadPoolService service = new ThreadPoolService();
8.service.start();
9.// 执行十次使命
10.for (int i = 0; i < 10; i++) {
11.service.runTask(new SimpleTaskTest());
12.}
13.// 睡眠1秒钟,期待所有使命执行完毕
14.Thread.sleep(1000);
15.service.stop();
16.}
17.}
18.public class SimpleTaskTest extends Task {
19.@Override
20.public void deal() {
21.// do something
22.}
23.public static void main(String[] args) throws InterruptedException {
24.ThreadPoolService service = new ThreadPoolService();
25.service.start();
26.// 执行十次使命
27.for (int i = 0; i < 10; i++) {
28.service.runTask(new SimpleTaskTest());
29.}
30.// 睡眠1秒钟,期待所有使命执行完毕
JAVA基础:Java线程池在使用中的问题实例解答
</p> 31.Thread.sleep(1000);32.service.stop();
33.}
34.}
当然,我们实现的是最简单的,这里只是为了演示Java线程池的实现事理。在现实应用中,按照情形的分歧,可以做良多优化。好比:
调整使命队列的轨则,给使命设置优先级,级别高的使命优先执行。
动态维护Java线程池,当待执行使命数目较多时,增添线程的数目,加速使命的执行速度;当使命较少时,收受接管一部门持久闲置的Java线程池,削减对系统资本的耗损。
事实上Java5.0及以上版本已经为我们供给了线程池功能,无需再年夜头实现。这些类位于java.util.concurrent包中。
Executors类供给了一组建树Java线程池对象的体例,常用的有一下几个:
Java代码
35.public static ExecutorService newCachedThreadPool() {
36.// other code
37.}
38.public static ExecutorService newFixedThreadPool(int nThreads) {
39.// other code
40.}
41.public static ExecutorService newSingleThreadExecutor() {
42.// other code
43.}
44.public static ExecutorService newCachedThreadPool() {
45.// other code
46.}
47.public static ExecutorService newFixedThreadPool(int nThreads) {
48.// other code
49.}
50.public static ExecutorService newSingleThreadExecutor() {
51.// other code
52.}
newCachedThreadPool()体例建树一个动态的线程池,其中线程的数目会按照现实需要来建树和收受接管,适合于执行年夜量短期使命的情形;newFixedThreadPool(int nThreads)体例建树一个包含固定数目线程对象的Java线程池,nThreads代表要建树的线程数,如不美观某个线程在运行的过程中因为异常而终止了,那么一个新的线程会被建树和启动来庖代它;而newSingleThreadExecutor()体例例只在线程池中建树一个线程,来执行所有的使命。
页:
[1]