小弟我前段时间看了一下jdk的并发包。感觉各种懵逼。每一个能理解明白的。但还是稍有体会一些的。
这里记录一下ExecutorService 并发工具的使用吧。
简单的说呢,这个类,是可以对任务线程进行调度的。非常实用。可以通过Executors的的静态方法进行创建。这里以ExecutorService es = Executors.newFixedThreadPool(5);为例
意思是:创建一个指定容量的线程池,容量为5,并且使这5个线程始终处于活跃状态,当任务数量超过5个时,只能执行5个任务,剩下的任务,需要等池子中的线程将任务执行完毕后再执行,如果有线程因为执行任务失败而终止运行,则会有新的闲置线程取代他执行任务(会不会导致所有线程都执行失败而终止呢?)
public class ThreadPoolDemo {
public static class MyTask implements Runnable{
@Override
public void run() {
System.out.println(System.currentTimeMillis() + ":thread ID "
+ Thread.currentThread().getId());
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MyTask task = new MyTask();
//线程池中的任务和数据属性时唯一的。有5个容量,一次就能执行5个。10个任务要分两次执行,
//在ExecutorService没有shutDown时,线程池一直监控是否有任务,如果还有,则继续执行,什么时间执行不一定。
ExecutorService es = Executors.newFixedThreadPool(5);
for(int i = 0; i < 11; i++){
es.submit(task);
}
}