网站首页 > java教程 正文
1、什么是线程池? 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
2、线程池的优势 (1)、降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗; (2)、提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行; (3)方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场))。 (4)提供更强大的功能,延时定时线程池。
3、线程池工作流程
4、线程池的使用步骤 1.使用线程池的工厂类Executors里面提供的静态方法newFixedThreadPool生产一个指定数量的线程池。 2.创建一个类,实现Runnable接口,重写run()方法,设置线程任务 3.调用ExecutorService中的submit()方法,传递线程任务(实现类),开启线程,执行run()方法。 4.调用ExecutorService中的shutdown()方法销毁线程池(一般不建议执行,除非不使用多线程了)。
5、实例演示线程池的简单使用
package threadpool;
public class RunnableImpl implements Runnable {
public void run(){
System.out.println(Thread.currentThread().getName()+"创建一个新的线程");
}
}
package threadpool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 线程池的使用步骤:
* 1.使用线程池的工厂类Executors里面提供的静态方法newFixedThreadPool生产一个指定数量的线程池。
* 2.创建一个类,实现Runnable接口,重写run()方法,设置线程任务
* 3.调用ExecutorService中的submit()方法,传递线程任务(实现类),开启线程,执行run()方法。
* 4.调用ExecutorService中的shutdown()方法销毁线程池(一般不建议执行,除非不使用多线程了)。
*
*/
public class DemoThreadPool {
public static void main(String[] args) {
int count = 15;
//创建一定数量的线程池对象
ExecutorService executorService = Executors.newFixedThreadPool(3);
while(count>0){
//设置线程任务,并开启线程池
executorService.submit(new RunnableImpl());
count--;
}
//销毁线程池
executorService.shutdown();
}
}
/**
- 线程池的使用步骤:
- 1.使用线程池的工厂类Executors里面提供的静态方法newFixedThreadPool生产一个指定数量的线程池。
- 2.创建一个类,实现Runnable接口,重写run()方法,设置线程任务
- 3.调用ExecutorService中的submit()方法,传递线程任务(实现类),开启线程,执行run()方法。
- 4.调用ExecutorService中的shutdown()方法销毁线程池(一般不建议执行,除非不使用多线程了)。 * */public class DemoThreadPool {
public static void main(String[] args) {
int count = 15;
//创建一定数量的线程池对象
ExecutorService executorService = Executors.newFixedThreadPool(3);
while(count>0){
//设置线程任务,并开启线程池
executorService.submit(new RunnableImpl());
count--;
}
//销毁线程池
executorService.shutdown();
}
}
原文链接:https://blog.csdn.net/weixin_43157935/article/details/105828469
猜你喜欢
- 2024-09-16 java-线程池详解(java线程池入门)
- 2024-09-16 线程进阶:实战应用之Java线程池全面解析
- 2024-09-16 Java开发之高并发必备篇(七)——线程池
- 2024-09-16 Java-线程池专题(什么是线程池,如何使用,为什么要用)
- 2024-09-16 Java线程之Executors线程池的原理和使用
- 2024-09-16 Java的四种线程池的使用,以及自定义线程工厂
- 2024-09-16 探索JAVA并发 - 线程池详解(java多线程并发编程 线程池)
- 2024-09-16 Java线程池核心(十一):线程池状态
- 2024-09-16 Java 线程池(java线程池原理)
- 2024-09-16 技术进阶:Java线程池的使用和原理分析
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)