引言
合理利用线程池能够带来三个好处。
- 第一:降低资源消耗,提高响应速度
- 第二:防止内存的泄漏。
- 第三:提高线程的可管理性。
线程池核心类
我们可以通过ThreadPoolExecutor来创建一个线程池。
corePoolSize
maximumPoolSize
keepAliveTime
TimeUnit
runnableTaskQueue
- SynchronousQueue
- LinkedBlockingQueue
- ArrayBlockingQueue
RejectedExecutionHandler
ThreadFactory
线程池的主要工作流程
线程满-》队列满-》线程池满-》执行策略
Java常用线程池
常用线程池为newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor统统继承于ThreadPoolExecutor。
newCachedThreadPool
package test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExecutorTest { public static void main(String[] args) { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); for (int i = 0; i < 10; i++) { final int index = i; try { Thread.sleep(index * 1000); } catch (InterruptedException e) { e.printStackTrace(); } cachedThreadPool.execute(new Runnable() { public void run() { System.out.println(index); } }); } } }
newFixedThreadPool
package test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExecutorTest { public static void main(String[] args) { ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); for (int i = 0; i < 10; i++) { final int index = i; fixedThreadPool.execute(new Runnable() { public void run() { try { System.out.println(index); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }); } } }
newScheduledThreadPool
package test;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
public void run() {
System.out.println("delay 3 seconds");
}
}, 3, TimeUnit.SECONDS);
}
}
- newSingleThreadExecutor