线程池的使用

简介: 线程池的使用

什么是线程

     是操作系统能够进行运算调度的最小单位。(例如: cpu 对前端发往后端的一个请求的处理叫一个线程)

什么是线程池

     线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。

线程池的优势

  1. 降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;
  2. 提高系统响应速度,当有任务到达时,无需等待新线程的创建便能立即执行;
  3. 方便线程并发数的管控,线程若是无限制的创建,不仅会额外消耗大量系统资源,更是占用过多资源而阻塞系统或oom等状况,从而降低系统的稳定性。线程池能有效管控线程,统一分配、调优,提供资源使用率;
  4. 更强大的功能,线程池提供了定时、定期以及可控线程数等功能的线程池,使用方便简单。

线程池流程

线程池实例

1. public class Client {
2. public static void main(String[] args) {
3. //实例化一个固定大小为10个线程的newFixedThreadPool线程池
4. ExecutorService executorService = Executors.newFixedThreadPool(80);
5.         List<String> number = new ArrayList<>();
6. for(int i = 0 ; i <1000;i++){
7.             number.add("多了"+i+"学习");
8.         }
9. final CountDownLatch latch = new CountDownLatch(number.size());
10. //计算1000个学生的学习数据
11. for(int i = 0;i<number.size();i++){
12. //线程提交任务
13.             executorService.submit(new Study(i,latch,number));
14.         }
15. try{
16. //使调用该方法的主线程处于等待状态,当倒数到0时主线程才执行
17.             latch.await();
18.         } catch (InterruptedException e) {
19. throw new RuntimeException("王思琪学习如何学习多线程处理异常",e);
20.         }
21. //关闭线程池
22.         executorService.shutdown();
23.     }
24. }
1. public class Study implements Runnable {
2. int studyNumber;
3.     CountDownLatch latch;
4.     List<String> number;
5. 
6. public Study(int studyNumber,CountDownLatch latch,List<String> number){
7. this.studyNumber=studyNumber;
8. this.latch=latch;
9. this.number=number;
10.     }
11. 
12. private void start(){
13. //输出学生编号和执行该任务的线程名称
14.         System.out.println("王思琪学了"+studyNumber+"次如何学习"+Thread.currentThread().getName());
15.     }
16. @Override
17. public void run() {
18. //计算学生学习数据的方法
19. this.start();
20. //计数器容量减一
21.         latch.countDown();
22.     }
23. }


相关文章
|
2月前
|
缓存 算法 Java
|
2月前
|
Java C++
c++简单线程池实现
c++简单线程池实现
|
8月前
|
Java
6. 实现简单的线程池
6. 实现简单的线程池
33 0
|
11月前
|
监控 Java
线程池的讲解和实现
线程池的讲解和实现
|
缓存 算法 Java
线程池和使用
线程池是一种用于管理和复用线程的机制。在多线程应用程序中,线程的创建和销毁需要消耗大量的系统资源,而线程池可以通过预先创建一定数量的线程,然后将任务分配给这些线程来避免频繁地创建和销毁线程,从而提高应用程序的性能和效率。线程池还可以控制并发线程的数量,避免过多的线程竞争资源导致的性能下降和系统崩溃。线程池是多线程编程中常用的一种技术,被广泛应用于各种类型的应用程序中。
60 0
线程池和使用
KeyAffinityExecutor 线程池
KeyAffinityExecutor 线程池
|
监控 Java
关于线程池,你需要了解这些
1、 降低资源消耗;提高线程利用率,降低创建和销毁线程的消耗。 2、 提高响应速度;任务来了,直接有线程可用可执行,而不是先创建线程,再执行。 3、 提高线程的可管理性;线程是稀缺资源,使用线程池可以统一分配调优监控。
119 0
|
存储 监控 Java
线程池
线程池
114 0
|
Java 程序员
我是一个线程池
我是一个线程池
|
存储 安全 Java
线程池没你想的那么简单(上)
自己动手写一个五脏俱全的线程池,同时会了解到线程池的工作原理,以及如何在工作中合理的利用线程池。