最近第一次使用了线程池,记录一下吧。
大概就是先定义对象
ThreadPoolExecutor executor=new ThreadPoolExecutor(5,10,200,
TimeUnit.MILLISECONDS,new ArrayBlockingQueue(5));
参数从左到右依次为核心线程数,最大线程数,线程执行完毕后保存时间,保存时间的单位,工作队列(当线程数多于核心线程数时,会优先放入工作队列)
然后调用execute方法,这个方法的参数类型是Runnable,因此需要创建一个实现runnable接口的内部类。
下面是别人的demo。
public class Test {
public static void main(String[] args) {
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue<Runnable>(5));
for(int i=0;i<15;i++){
MyTask myTask = new MyTask(i);
executor.execute(myTask);
System.out.println("线程池中线程数目:"+executor.getPoolSize()+",队列中等待执行的任务数目:"+
executor.getQueue().size()+",已执行玩别的任务数目:"+executor.getCompletedTaskCount());
}
executor.shutdown();
}
}
class MyTask implements Runnable {
private int taskNum;
public MyTask(int num) {
this.taskNum = num;
}
@Override
public void run() {
System.out.println("正在执行task "+taskNum);
try {
Thread.currentThread().sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("task "+taskNum+"执行完毕");
}
}
原文地址https://blog.csdn.net/u011531613/article/details/61921473