常用线程池

从NASA官网到分析图:MOD09A1地表反射率数据的完整处理流程(含QC筛选) 本文详细介绍了MOD09A1地表反射率数据的完整处理流程,从NASA官网数据下载到QC筛选,再到NDVI图生成。特别强调了质量控制(QC)信息在筛选可靠像元中的关键作用,帮助研究人员获取高质量遥感数据。 阅读详情

一、newCachedThreadPool

创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

这种类型的线程池特点是:

  • 工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。
  • 如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。
  • 在使用CachedThreadPool时,一定要注意控制任务的数量,否则,由于大量线程同时运行,很有会造成系统瘫痪

示例代码如下:

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

创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。

FixedThreadPool是一个典型且优秀的线程池,它具有线程池提高程序效率和节省创建线程时所耗的开销的优点。但是,在线程池空闲时,即线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源。

示例代码如下:

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();
     }
    }
   });
  }
 }
}

因为线程池大小为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字。
定长线程池的大小最好根据系统资源进行设置如Runtime.getRuntime().availableProcessors()。

三、newSingleThreadExecutor

创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。如果这个线程异常结束,会有另一个取代它,保证顺序执行。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。

示例代码如下:

package test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExecutorTest {
 public static void main(String[] args) {
  ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
  for (int i = 0; i < 10; i++) {
   final int index = i;
   singleThreadExecutor.execute(new Runnable() {
    public void run() {
     try {
      System.out.println(index);
      Thread.sleep(2000);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   });
  }
 }
}

四、newScheduleThreadPool

创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行。

延迟3秒执行,延迟执行示例代码如下:

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);
 }
}

表示延迟1秒后每3秒执行一次,定期执行示例代码如下:

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.scheduleAtFixedRate(new Runnable() {
   public void run() {
    System.out.println("delay 1 seconds, and excute every 3 seconds");
   }
  }, 1, 3, TimeUnit.SECONDS);
 }
}

转自 https://www.cnblogs.com/aaron911/p/6213808.html

华为OD机试双机位C卷-MVP争夺战 (C/C++/Py/Java/Js/Go) 华为OD机试(机考)双机位C卷 【MVP争夺战】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - MVP争夺战, 阅读详情

相关推荐

FPGA中的CMAC硬核与Interlaken硬核

CMAC硬核和Interlaken硬核是FPGA中两种重要的内置功能模块,它们分别在CNN推理和高带宽芯片到芯片接口方面发挥着关键作用。FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)中的CMAC硬核与Interlaken硬核是两种重要的内置功能模块,它们在FPGA设计中扮演着关键角色。需要注意的是,FPGA设计中的硬核选择不仅取决于硬核本身的性能,还需要考虑硬核与FPGA芯片其他部分的兼容性、功耗、成本等因素。Interlaken硬核。

weixin_41230430的博客 1481

线程-10、线程池的几种方式

常用的几种线程池 1newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 这种类型的线程池特点是: 工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE),这样可灵活的往线程池中添加线程。 如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的...

weixin_30418341的博客 237

树莓派4B+DroneKit实战:手把手教你用Python控制无人机飞行(附避坑指南)

本文提供了一份详尽的树莓派4B与DroneKit配置实战指南,涵盖从硬件选型、软件环境搭建到Python编程控制无人机的完整流程。文章重点解决了ARM架构下的兼容性问题、MAVLink通信配置及端口管理等常见难题,并附带了实用的避坑指南和代码示例,帮助开发者构建稳定可靠的无人机控制系统。

weixin_29056781的博客 410

四种常见线程池使用举例

线程池 线程池:Executor 管理多个异步任务的执行,而无需程序员显式地管理线程的生命周期。这里的异步是指多个任务的执行互不干扰,不需要进行同步操作。 主要有四种线程池: 缓存池 newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 下面是它的使用方法: package com.xz...

weixin_30298497的博客 578

泰克示波器TDS210改装便携示波器

泰克示波器TDS210改装编写示波器

超级网吧的博客 3079

OpenClaw实战系列04:Jira/Confluence深度集成实战指南

汇总 Confluence 空间 TEAM 下所有关于“性能优化”的文档,输出要点自然语言创建和查询 Jira 任务,无需离开聊天工具基于 Confluence 的私有知识库问答,让 AI 真正理解团队文档Jira 与 Confluence 联动,打通项目管理与知识管理定时同步与通知,自动化团队信息流转至此,你的 OpenClaw AI 助理已经不仅是一个聊天机器人,而是真正融入团队工作流的“智能项目管理助手”。下一期我们将带来OpenClaw 自定义技能开发实战。

PeterPan的博客 572

线程池之CachedThreadPool学习

简介 CachedThreadPool是一个根据需要创建线程的线程池。 创建方法 public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, Ti...

墨玉浮白的博客 1万+

【使用FPGA实现MIPI DSI接口】——如何使用FPGA实现MIPI DSI接口?这是一个让许多开发者都感到困扰的问题。本文将介绍如何使用FPGA设计和实现...

【使用FPGA实现MIPI DSI接口】——如何使用FPGA实现MIPI DSI接口?MIPI DSI(移动产业处理器接口 - 显示串行接口)是一种用于在移动设备中传输视频数据的标准接口,它是目前大部分智能手机和平板电脑所采用的显示接口。首先,我们需要实现MIPI DSI的物理层接口。在实现MIPI DSI接口后,我们还需要编写驱动程序来控制MIPI DSI显示屏显示图像。这里只是提供了MIPI DSI接口的物理层代码示例,完整的MIPI DSI接口实现需要包括控制器和驱动程序等更多内容。

uote_e的博客 1995

一篇文章快速搞懂Java中常用的四种线程池

在Java中使用线程池,可以用ThreadPoolExecutor的构造函数直接创建出线程池实例,如何使用参见之前的文章Java线程池构造参数详解。不过,在Executors类中,为我们提供了常用线程池的创建方法。接下来我们就来了解常用的四种: newFixedThreadPool 首先,看一下这种线程池的创建方法: public static ExecutorService newFixedTh...

万猫学社 2万+

基于Vision Transformer的鸟类图像分类(200个类别)完整代码+数据

基于Vision Transformer的鸟类图像分类(200个类别)完整代码+数据

1727

SpringBoot 整合Jasypt 实现配置文件加密读取操作详解

SpringBoot 整合Jasypt 实现配置文件加密读取操作详解

congge 4099

Java线程池

以下转载自:http://www.cnblogs.com/zhujiabin/p/5404771.html 介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程池一些高级功能。 1、new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runn

vincentff7zg的专栏 494

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

线程池原理及常用线程池介绍

线程池概述: 就是把一堆线程创建好了放在一个容器中(池子里),需要用的时候就直接拿出来用,用完之后再放回池子里。 线程池的好处: 降低资源消耗,降低了频繁创建线程和销毁线程的开销 提高响应速度 提高线程的可管理性,可以对线程进行一些操作,方便管理线程 线程池的图解: 线程池的运行过程: 线程池家族 线程池的最上层接口是Executor,这个接口定义了一个核心方法execute(Runn...

weixin_44397907的博客 1263

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

线程池原理&常用四大线程池及七大参数

线程池原理&常用四大线程池及七大参数,拒绝策略

陌上人如玉,公子世无双 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

常用的线程池

线程的创建和销毁都需要映射到操作系统,代价高昂,出于避免频繁创建、销毁线程以及方便线程管理的需要,线程池应运而生。

weixin_44231698的博客 422

【并发编程】JUC常用类以及线程池

并发编程中JUC常用类以及线程池相关知识整理总结!

小谷同学的博客 1236

常用线程池代码

线程池的介绍 1 常用的 池化技术 C3P0 DBCP 2 线程池的衍生 频繁的创建线程对象和多线程之间进行上下文切换,是非常耗时间和资源的所以JDK1.5中提出了线程池技术 3 使用线程池 Exector 4 线程池的创建 1 创建一个固定大小的线程池 ( 最常用的方法 ) ExecutorService...

Chenlele710147的博客 3419

常用的几种线程池并讲讲其中的工作原理。什么是线程池?

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后分配给空闲线程来执行。线程池的主要目的是减少创建和销毁线程的开销,并且可以通过限制并发线程的数量来提高系统的性能和稳定性。每种线程池都有其特定的用途和优势,选择合适的线程池可以显著提高应用程序的性能和稳定性。:适用于任务数量较多且每个任务执行时间较短的场景。:适用于执行大量耗时较短的小任务。:适用于需要保证任务顺序执行的场景。:适用于定时任务和周期性任务。:适用于CPU密集型任务,可以充分利用多核处理器的性能。

qq_33240556的博客 1002

Java六种常用线程池

FixedThreadPool(有限线程数的线程池):线程数是固定的,一旦线程池的大小达到了最大值,新的任务会被放入阻塞队列中等待。适用于需要限制线程数的场景,如服务器端并发请求。CachedThreadPool(无限线程数的线程池):线程数不限制,适用于执行很多短期异步任务的程序,线程数根据需要自动调整,线程空闲超过60秒则自动回收。ScheduledThreadPool(定时线程池):可以定时或延时执行任务的线程池。适用于需要延迟执行或定期执行任务的场景。

海的那边,还是海吗 1287

jdk1.8中常用线程池总结

常用线程池总结 1.ThreadPoolExecutor 2.newFixedThreadPool 3.newCachedThreadPool 4.newSingleThreadExecutor 5.newScheduledThreadPool package com.example.demo.study.thread; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; import stat

star_pluss的博客 368

java线程池与五种常用线程池策略使用与解析

java线程池与四种常用线程池策略使用与解析 一.线程池 关于为什么要使用线程池久不赘述了,首先看一下java中作为线程池Executor底层实现类的ThredPoolExecutor的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,

徐刚的技术博客 3万+

线程池常用的阻塞队列有哪些

线程池常用的阻塞队列包括:1. ArrayBlockingQueue(基于数组的有界队列);2. LinkedBlockingQueue(基于链表的可选有界/无界队列);3. SynchronousQueue(不存储元素,直接传递任务);4. PriorityBlockingQueue(支持优先级排序的无界队列)。此外,ScheduledThreadPoolExecutor使用延迟队列DelayedWorkQueue处理定时任务。

weixin_46084191的博客 833

常用线程池及适用场景

线程池的工作队列 ArrayBlockingQueue: (有界队列) 是一个数组实现的有界阻塞队列,按FIFO排序量 LinkedBlockingQueue : 是一个基于链表实现的阻塞队列,按FIFO排序任务,可以设置容量,不设置使用Integer.Max_VALUE (不设置就是无界队列)newFixThreadPool,newSingleThreadExecutor使用此队列 (吞吐量高...

fajing_feiyue的博客 3548

常用线程池及使用场景

常用线程池及使用场景 常用线程池及使用场景 Java中哪些线程池? java线程池: Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newSched...

小橙橙 3267

java中常用的几种线程池

1. 为什么使用线程池 主要是为了防止资源的不足,因为频繁的创建和销毁线程是需要大量资源的。尤其是:线程执行时>线程创建时间+线程销毁时间,这个时候是会堆积大量的线程的。线程池其实就是类似于数据库连接池都是为了减少创建和销毁,提高资源的利用率。 2. 使用线程池的风险 1、死锁:任何的多线程都是有可能发生时死锁的情况,就是线程之间在互相等待 2、 资源不足:这个原因主要是线程池太大造成,正常...

weixin_42812598的博客 3590
上一篇: Struts2和SpringMvc的区别
下一篇: 企业各职位英文缩写
cashZhang27
博客等级 码龄10年 22粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值