Java并发程序设计线程池之线程数量的控制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发程序设计线程池之线程数量的控制相关的知识,希望对你有一定的参考价值。
1.1. ExecutorService
ExecutorService是线程池的接口。
Executors是用于创建不同线程池的工具类。
1.2. 线程数量固定的线程池
ExecutorService executorService = Executors.newFixedThreadPool(2); for(int j=0;j<10;j++){ final int t = j; executorService.execute( new Runnable(){ @Override public void run() { for(int i=0;i<4;i++){ System.out.println("t:" + t + "," + "i:" + i + ", tid:" + Thread.currentThread().getId()); } } });
t:0,i:0, tid:8
t:0,i:1, tid:8
t:0,i:2, tid:8
t:0,i:3, tid:8
t:1,i:0, tid:9
t:2,i:0, tid:8
t:2,i:1, tid:8
t:1,i:1, tid:9
t:2,i:2, tid:8
t:2,i:3, tid:8
t:1,i:2, tid:9
t:1,i:3, tid:9
t:4,i:0, tid:9
t:4,i:1, tid:9
t:4,i:2, tid:9
t:3,i:0, tid:8
t:3,i:1, tid:8
t:4,i:3, tid:9
t:3,i:2, tid:8
t:5,i:0, tid:9
t:5,i:1, tid:9
t:3,i:3, tid:8
t:5,i:2, tid:9
t:5,i:3, tid:9
t:6,i:0, tid:8
t:6,i:1, tid:8
t:6,i:2, tid:8
t:6,i:3, tid:8
t:8,i:0, tid:8
t:7,i:0, tid:9
t:7,i:1, tid:9
t:8,i:1, tid:8
t:8,i:2, tid:8
t:8,i:3, tid:8
t:7,i:2, tid:9
t:9,i:0, tid:8
t:7,i:3, tid:9
t:9,i:1, tid:8
t:9,i:2, tid:8
t:9,i:3, tid:8
1.3. 线程数量可变的线程池
ExecutorService executorService = Executors.newCachedThreadPool(); for(int j=0;j<10;j++){ final int t = j; executorService.execute( new Runnable(){ @Override public void run() { for(int i=0;i<4;i++){ System.out.println("t:" + t + "," + "i:" + i + ", tid:" + Thread.currentThread().getId()); } } }); }
t:2,i:0, tid:10
t:2,i:1, tid:10
t:3,i:0, tid:11
t:3,i:1, tid:11
t:0,i:0, tid:8
t:0,i:1, tid:8
t:0,i:2, tid:8
t:0,i:3, tid:8
t:1,i:0, tid:9
t:1,i:1, tid:9
t:1,i:2, tid:9
t:3,i:2, tid:11
t:1,i:3, tid:9
t:2,i:2, tid:10
t:2,i:3, tid:10
t:5,i:0, tid:13
t:5,i:1, tid:13
t:9,i:0, tid:17
t:4,i:0, tid:12
t:4,i:1, tid:12
t:9,i:1, tid:17
t:9,i:2, tid:17
t:5,i:2, tid:13
t:5,i:3, tid:13
t:8,i:0, tid:16
t:8,i:1, tid:16
t:8,i:2, tid:16
t:8,i:3, tid:16
t:7,i:0, tid:15
t:3,i:3, tid:11
t:6,i:0, tid:14
t:7,i:1, tid:15
t:7,i:2, tid:15
t:7,i:3, tid:15
t:9,i:3, tid:17
t:4,i:2, tid:12
t:6,i:1, tid:14
t:6,i:2, tid:14
t:6,i:3, tid:14
t:4,i:3, tid:12
1.4. 单个线程的线程池
ExecutorService executorService = Executors.newSingleThreadExecutor(); for(int j=0;j<10;j++){ final int t = j; executorService.execute( new Runnable(){ @Override public void run() { for(int i=0;i<4;i++){ System.out.println("t:" + t + "," + "i:" + i + ", tid:" + Thread.currentThread().getId()); } } }); }
输出信息可以看到,对(每个任务(t),线程id(tid)都相同。
t:0,i:0, tid:8
t:0,i:1, tid:8
t:0,i:2, tid:8
t:0,i:3, tid:8
t:1,i:0, tid:8
t:1,i:1, tid:8
t:1,i:2, tid:8
t:1,i:3, tid:8
t:2,i:0, tid:8
t:2,i:1, tid:8
t:2,i:2, tid:8
t:2,i:3, tid:8
t:3,i:0, tid:8
t:3,i:1, tid:8
t:3,i:2, tid:8
t:3,i:3, tid:8
t:4,i:0, tid:8
t:4,i:1, tid:8
t:4,i:2, tid:8
t:4,i:3, tid:8
t:5,i:0, tid:8
t:5,i:1, tid:8
t:5,i:2, tid:8
t:5,i:3, tid:8
t:6,i:0, tid:8
t:6,i:1, tid:8
t:6,i:2, tid:8
t:6,i:3, tid:8
t:7,i:0, tid:8
t:7,i:1, tid:8
t:7,i:2, tid:8
t:7,i:3, tid:8
t:8,i:0, tid:8
t:8,i:1, tid:8
t:8,i:2, tid:8
t:8,i:3, tid:8
t:9,i:0, tid:8
t:9,i:1, tid:8
t:9,i:2, tid:8
t:9,i:3, tid:8
以上是关于Java并发程序设计线程池之线程数量的控制的主要内容,如果未能解决你的问题,请参考以下文章