Java多线程之线程池详解
Java多线程之线程池详解
目录:
- 线程池使用及优势
- 线程池3个常用方式
- 线程池7大参数深入介绍
- 线程池底层工作原理
1. 线程池使用及优势
- 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,
如果线程数量超过了最大数量 超出数量的 线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。 - 它的主要特点为:线程复用,控制最大并发数,管理线程。
优点:
- 降低资源消耗。通过重复利用己创建的线程降低线程创建和销毁造成的消耗。
- 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
- 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进
行统一的分配,调优和监控
2. 线程池3个常用方式
Java中的线程池是通过Executor框架实现的,该框架中用到了Executor,Executors,
ExecutorService,ThreadPoolExecutor这几个类。
线程池3个常用方式:
- Executors.newFixedThreadPool(int) :执行长期任务,性能好很多
- Executors.newSingleThreadExecutor() : 一个任务一个任务执行的场景
- Executors.newCachedThreadPooI() : 执行很多个短期异步的小程序或者负载较轻的服务器。
先看代码,再根据源码总结
1. Executors.newFixedThreadPool(int)
- Executors.newFixedThreadPool(int)概述
代码验证
public class MyThreadPoolDemo {
public static void main(String[] args) {
// 1池5个处理线程
ExecutorService threadPool = Executors.newFixedThreadPool(5);
// 模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程。
try {
for (int i = 1; i <= 10; i++) {
threadPool.execute(() -> {
System.out.println(Thread.currentThread().getName()+"\t 办理业务");
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
threadPool.shutdown();
}
}
}
执行结果:
2. Executors.newSingleThreadExecutor()
- Executors.newSingleThreadExecutor()概述
代码验证
public class MyThreadPoolDemo {
public static void main(String[] args) {
ExecutorService threadPool = Executors.newSingleThreadExecutor();
try {
// 模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程。
for (int i = 1; i <= 10; i++) {
threadPool.execute(() -> {
System.out.println(Thread.currentThread().getName()+"\t 办理业务");
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
threadPool.shutdown();
}
}
}
- 执行结果:
3. Executors.newCachedThreadPooI()
- Executors.newCachedTIyeadPooI() 概述
代码验证:
public class MyThreadPoolDemo {
public static void main(String[] args) {
ExecutorService threadPool = Executors.newCachedThreadPool();
try {
// 模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程。
for (int i = 1; i <= 10; i++) {
threadPool.execute(() -> {
System.out.println(Thread.currentThread().getName() + "\t 办理业务");
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
threadPool.shutdown();
}
}
}
执行结果:
3. 线程池7大参数深入介绍
篇幅限制,另开一篇详细说明。
Java多线程之线程池7大参数详解
4. 线程池底层工作原理
篇幅限制,另开一篇详细说明。
Java多线程之线程池底层工作原理
还没有评论,来说两句吧...