参考文章:
线程池: https://www.jianshu.com/p/210eab345423
Java并发编程——线程池 : https://www.cnblogs.com/dolphin0520/p/3932921.html
示例:
package com.xzf.threadpool;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadPoolDemo {
public static void main(String[] args) {
ThreadPoolExecutor executor = new ThreadPoolExecutor(2,5,200, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(5));
//ExecutorService executor = Executors.newFixedThreadPool(5); //创建一个固定线程池
for (int i = 0; i < 10; i++) {
MyTask myTask = new MyTask(i);
try {
executor.execute(myTask); //给线程池里加入一个线程
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程池中线程数目:" + ((ThreadPoolExecutor) executor).getPoolSize()+
" 队列中等待执行的任务数目:"+((ThreadPoolExecutor) executor).getQueue().size()+" 已执行完的任务数目:"+
((ThreadPoolExecutor) executor).getCompletedTaskCount());
}
executor.shutdown();
}
}
class MyTask implements Runnable{
private int taskNum;
public MyTask(int num) {
this.taskNum = num;
}
public void run() {
System.out.println("正在执行task:"+ taskNum);
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("task"+taskNum+"执行完毕");
}
}
package com.xzf.threadpool;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadPoolDemo {
public static void main(String[] args) {
ThreadPoolExecutor executor = new ThreadPoolExecutor(2,5,200, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(5));
//ExecutorService executor = Executors.newFixedThreadPool(5); //创建一个固定线程池
for (int i = 0; i < 10; i++) {
MyTask myTask = new MyTask(i);
try {
executor.execute(myTask); //给线程池里加入一个线程
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程池中线程数目:" + ((ThreadPoolExecutor) executor).getPoolSize()+
" 队列中等待执行的任务数目:"+((ThreadPoolExecutor) executor).getQueue().size()+" 已执行完的任务数目:"+
((ThreadPoolExecutor) executor).getCompletedTaskCount());
}
executor.shutdown();
}
}
class MyTask implements Runnable{
private int taskNum;
public MyTask(int num) {
this.taskNum = num;
}
public void run() {
System.out.println("正在执行task:"+ taskNum);
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("task"+taskNum+"执行完毕");
}
}
运行结果: