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并发程序设计线程池之线程数量的控制的主要内容,如果未能解决你的问题,请参考以下文章

Java并发程序设计线程池之异常终止和正常关闭

线程池之 Executors

Java并发程序设计线程池之用于定时器

Java并发程序设计线程池之获取任务执行结果

Java并发程序设计(10)线程池之任务结果的异常处理

java线程池之ThreadPoolExecutor