今天记录下线程池的创建和使用。因为在一个程序中往往都只会使用一个线程池,所以为了代码更加的完善,我们可以使用单例模式来创建线程池,单例模式是一种设计模式,特点是它私有化了构造方法,内部创建了一个需要返回的对象,比如我们创建线程池需要的就是一个线程池,所以返回的是一个ExecutorService的对象。
操作线程池一般分为如下几步:
1.创建线程池
2.创建Runnable对象
3.使用submit提交runnable实例
4.关闭线程池(一般是不用关闭的)
创建线程池有四种方式:
1.创建存活60秒的线程池:
ExecutorService threadPool = Executors.newCachedThreadPool();
2.创建一个固定线程数的线程池,存活时间很长
ExecutorService threadPool2 = Executors.newFixedThreadPool(5);
3.创建一个只有一个线程的线程池,存活时间很长
ExecutorService threadPool3 = Executors.newSingleThreadExecutor();
4.用封装好的单例模式ThreadPoolUtils.java来创建线程池
ExecutorService threadPool = ThreadPoolUtils.getThreadPool();
下面是我写的封装好的单例模式创建线程池和线程池的基本使用代码:
创建线程池
package com.jsjer;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
* 单例模式创建线程池
* 该模式可以保证程序中只创建一个线程池
*/
public class ThreadPoolUtils {
private ThreadPoolUtils() {
}
private static final ExecutorService threadPool = Executors.newCachedThreadPool();
public static ExecutorService getThreadPool() {
return threadPool;
}
线程池的使用
package com.jsjer;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolDemo {
public static void main(String[] args) {
// 1.创建线程池
// 1.创建60s的线程池
ExecutorService threadPool = Executors.newCachedThreadPool();
// 2.创建一个固定线程数的线程池,存活时间很长
// ExecutorService threadPool2 = Executors.newFixedThreadPool(5);
// 3.创建一个只有一个线程的线程池,存活时间很长
// ExecutorService threadPool3 = Executors.newSingleThreadExecutor();
// 4.用封装好的单例模式ThreadPoolUtils.java来创建线程池
// ExecutorService threadPool = ThreadPoolUtils.getThreadPool();
// 2.创建Runnable对象
MyRunnable task = new MyRunnable();
// 3.使用submit提交runnable实例
threadPool.submit(task);
// 4.关闭线程池
threadPool.shutdown();//一般不用关闭线程池
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println(“shanglele”);
}
}