如果无法理解,请多读几遍,并自己手动编译几次。
package com.hotpot.main;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class main {
public static void main (String[] args) {
//先建立strlist模拟大量数据
List<String> strlist = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
strlist.add("Str" + i);
}
//设置线程池维护线程的最大线程数
int thread = strlist.size() < 5 ? strlist.size() : 5; //最多建立5个线程数
//新建线程池
/*ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue
RejectedExecutionHandler handler)
corePoolSize: 线程池维护线程的最少线程数,也是核心线程数,包括空闲线程
maximumPoolSize: 线程池维护线程的最大线程数
keepAliveTime: 线程池维护线程所允许的空闲时间
unit: 程池维护线程所允许的空闲时间的单位
workQueue: 线程池所使用的缓冲队列
handler: 线程池对拒绝任务的处理策略*/
ThreadPoolExecutor thexe = new ThreadPoolExecutor(2, thread,
300, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(3),
new ThreadPoolExecutor.CallerRunsPolicy());
//安排线程池
for (int i = 0; i < thread; i++) {
thexe.execute(new PrintStr(i, strlist));
}
//关闭线程池
thexe.shutdown();
}
}
class PrintStr implements Runnable {
private int thnum;
private List<String> strlist;
public PrintStr (int thnum, List<String> strlist) {
this.thnum = thnum;
this.strlist = strlist;
}
public void run() {
for (String str : strlist) {
System.out.println("线程" + thnum + " " + str);
}
}
}