Executors是JDK1.5中线程并发库的类(api参考java.util.concurrent),该类提供了
很多用于创建线程池的方法,返回的线程池都实现了ExecutorService接口,这些线程池通常可提高程序性能。
本章用到的方法:
1.创建指定线程大小
public static ExecutorService newFixedThreadPool(int nThreads)
2.创建缓存线程池,如果当前没有可用线程,则创建一个新线程并添加到线程池中
public static ExecutorService newCachedThreadPool()
3.创建单一线程,相当于newFixedThreadPool大小为1
public static ExecutorService newSingleThreadExecutor()
例子:
实现创建一个三个线程的线程池,并往线程池中提交五个任务,每个任务循环五遍(既每个任务执行五次)
package com.study.communication;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 线程池
*
* @author 我夕
*
*/
public class ThreadPoolTest {
public static void main(String[] args) {
// 创建指定线程大小
ExecutorService service = Executors.newFixedThreadPool(3);
// 缓存线程池,这个方法是有多少个任务就创建多少条线程
// ExecutorService service=Executors.newCachedThreadPool();
// 创建单一线程,相当于newFixedThreadPool大小为1
// ExecutorService service=Executors.newSingleThreadExecutor();
// 循环5次,就是往线程池里扔五个任务
for (int i = 1; i <= 5; i++) {
final int task = i;
service.submit(new Runnable() {
@Override
public void run() {
// 循环五次,就是每个人物执行五遍
for (int j = 1; j <= 5; j++) {
// 这里停顿0.2秒,为了调试能够看到更好结果
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("当前线程" + Thread.currentThread()
+ "正在执行第 " + task + " 个任务的第 " + j + " 遍");
}
}
});
}
System.out.println("所有的任务都提交完毕");
// 线程用完,记得要关闭
service.shutdown();
}
}
执行结果:
从以上结果,可以看出,每次都只有三个任务被执行,因为我们只创建了三个线程,额外以上提到的创建缓存线程此与单一的线程代码中已写出,大家把注释换下就可以了,另外关于线程池一个比较实用的定时器功能,将在下一篇列出,祝大家学习愉快。。。