为什么使用线程池而不使用new Thread(runnable).start();

ThreadPoolExecutor代替new Thread创建异步单线程 阿里p3c代码规范不允许使用new Thread创建线程,也不推荐使用Executors,推荐使用ThreadPoolExecutor来手动创建线程池。方式1:corePoolSize设置为0,workQueue使用SynchronousQueue 方式2:corePoolSize设置为0,但要设置allowCoreThreadTimeOut(默认值为false)为true threadPoolExecutor.allowCoreThreadTimeOut(true); workQueue使用Sync 阅读详情

1、每次new Thread,新建对象性能差
2、缺乏统一管理,可能导致线程创建过多,死机等。
3、缺乏更多功能,如:定时执行,定期执行,线程中断等。

tips:养成良好习惯,从线程池开始!

4种线程池:

Java通过Executors提供四种线程池,分别为:
1、newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需求,可以灵活回收空闲线程,若无可回收则新建线程。
2、newFixedThreadPool创建一个定长线程池,可以控制线程最大并发数,超过的线程会在队列中等待。
3、newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。
4、newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行。

示例:1、2、3、4

1、newCachedThreadPool

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
cachedThreadPool.execute(new Runnable() {
     @Override
     public void run() {
        //do something
     }
});

2、newFixedThreadPool

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
fixedThreadPool.execute(new Runnable() {
      @Override
      public void run() {
          //do something
      }
});

3、newScheduledThreadPool

//延迟三秒执行
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
     @Override
     public void run() {
           //do something
     }
}, 3, TimeUnit.SECONDS);

//表示延迟1秒后每隔3秒钟执行一次
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        //do something
    }
}, 1, 3, TimeUnit.SECONDS);

4、newSingleThreadExecutor

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
singleThreadExecutor.execute(new Runnable() {
    @Override
    public void run() {
        //do something
    }
});

 如果对您有用的话赞一下呗!谢谢谢谢~

【java】Thread.start 它是怎么让线程启动的呢 线程的启动过程涉及到了 JVM 的参与,所以如果没有认真了解过,确实很难从一个本地方法了解的如此透彻。整个源码分析可以结合着代码调用UML时序图进行学习,基本核心过程包括:Java 创建线程和启动、调用本地方法 start0()、JVM 中 JVM_StartThread 的创建和启动、设置线程状态等待被唤醒、根据不同的OS启动线程并唤醒、最后回调 run() 方法启动 Java 线程。有时候可能只是一步很简单的方法,也会有它的深入之处,当真的懂了以后,就不用死记硬背。 阅读详情

相关推荐

Java中Thread.start和Thread.run区别;handler; Executor的框架:Runnable、Callable、Executor、Future、FutureTask 关系

目录 Java中Thread.start和Thread.run区别 新建Runable和在thread 中建Runable; 直接使用Thread.sleep; runOnUiThread使用 handler.sendEmptyMessage(1);postDelayed; Executor的框架: Runnable、Callable、Executor、Future、FutureTask 关系 Future Java中Thread.start和Thread.run区别 当程...

ZhangJiqun&191cm&85kg 458

线程学习

一、线程的创建: 用Java创建一个线程是这样的: Thread thread = new Thread(); 要启动Java线程,您将调用其start()方法,如下所示: thread.start(); 此示例未指定要执行的线程的任何代码。线程启动后会立即再次停止。 二、指定线程执行代码: 1、创建Thread子类,覆盖run()方法; package...

qq_31579261的博客 2240

绿联UGOS Pro系统虚拟机部署Windows 11详细教程(跳账户登录,安装内存驱动)

总的来说,此次的虚拟机部署Windows 11出现的问题应该是目前几乎所有虚拟机都可能出现的问题,和绿联是没有关系的。所以说如果你在其它NAS上虚拟机部署Windows 11系统如果出现同样的问题,那么今天教程的方案也同样适用于你。

qq_63499861的博客 1万+

【多线程】Thread 类及常见方法

1.Thread 类 在Java标准库中,提供有一个Thread,来表示/操作线程。 Thread 类也可以视为Java 标准库提供的API。 创建好的 Thread 实例,其实和操作系统中的线程是一一对应的关系。 操作系统,提供了一组关于线程API(C语言风格),Java对于这组API进一步封装了,就成了Thread类 2.创建线程 2.1继承Thread 类 通过Thread 类创建线程,最基本的做法就是创建子类,继承自Thread ,并且重写run方法 (1)继承Thread 来创建一

m0_60494863的博客 6289

【毕业设计】_基于STM32单片机的按摩椅( 原理图+源码)

按摩器系统基于STM32单片机设计,作为核心控制单元。系统配备了OLED显示屏、蓝牙模块、喇叭模块、播报模块和光电感应模块。光电感应器用于检测是否有人接近,同时,系统可以通过蓝牙接收控制指令并执行相应的操作。该系统支持40℃的热敷功能以及气囊按摩功能,具备温度显示功能,并且可以通过按键切换不同的按摩模式。当光电感应器检测到有人时,按摩椅会自动启动。使用DHT11传感器的红色按钮可以调整温度。

2401_85381100的博客 724

电源完整性分析:PDN阻抗与去耦电容设计——目标阻抗计算与电容选型深度实战

摘要:随着嵌入式处理器主频突破 GHz、多核架构普及,电源完整性(Power Integrity, PI)已成为高速 PCB 设计中不可忽视的关键环节。本文从 PDN(电源分配网络)阻抗模型出发,系统讲解目标阻抗计算方法、去耦电容选型策略、反谐振抑制技术,并结合 STM32F4 核心板的完整设计实例,提供一套可落地的电源完整性工程实践方案。电源完整性设计是一项系统工程,需要从目标阻抗计算电容选型反谐振抑制PCB 布局目标阻抗是设计的起点,由电源电压、纹波要求和瞬态电流决定去耦电容。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 1万+

Java多线程编程——线程终止

在Java中有以下三种方法可以终止正在运行的线程: 1. 通过设置退出标志位,使线程正常退出。 2. 调用Thread类中的stop()方法强行终止线程。但是不推荐使用这个方法,该方法已被弃用。 3. 使用Thread类中的interrupt()方法中断线程。 一、使用标志位终止线程 在线程类中,我们会定义一个标志位表示是否需要终止线程,并提供一个公共方法供外部设置标志位,在run()方法中通过标志位的取值判断是否需要终止。 例如,我们模拟了一个服务器不断接收客户端请求的过程。当主线程中将“

荔枝的FM 2129

cartographer运行错误集合

播放bag的时候错误 Check failed: sensor_to_tracking->translation().norm() < 1e-5 The IMU frame must be colocated with the tracking frame. Transforming linear acceleration into the tracking frame will otherwise be imprecise tracking frame不是imu的link 修改lua文件中的.

Studying…… 2020

为什么使用线程池而不使用new Thread(runnable).start();

1、每次new Thread,新建对象性能差2、缺乏统一管理,可能导致线程创建过多,死机等。3、缺乏更多功能,如:定时执行,定期执行,线程中断等。 4种线程池: Java通过Executors提供四种线程池,分别为: 1、newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需求,可以灵活回收空闲线程,若无可回收则新建线程。 2、newFixedThreadPool创建一个定长线程池,可以控制线程最大并发数,超过的线程会在队列中等待。 3、newScheduled.

qq_38386438的博客 2091

MounRiver Studio(MRS)使用技巧:添加头文件目录;增加代码分组

MounRiver Studio(MRS)使用技巧:添加头文件目录

cheng___yi的博客 1808

Kong API Gateway 配置与深入

Kong是一个开源的、高性能的API网关,提供了一种简单易用的服务间路由、流量管理和安全防护方案,其最初起源于Nginx Inc.,但后迁移至Apache Software Foundation。Kong支持RESTful、GraphQL、TCP/UDP等协议,可与AWS Lambda、Azure Functions、Google Cloud Functions等云函数平台集成。其主要功能包括:服务发现与负载均衡、请求代理、身份认证与授权、缓存、日志记录、监控指标、灰度发布、多种插件等。

AI天才研究院 2283

创建线程的四种方式(Thread、Runnable、线程池、Callable)

创建线程有四种方式:1、继承Thread类 2、实现Runnable接口 3、通过线程池创建 4、实现Callable接口,下面是具体介绍

qq_46111269的博客 4573

你的小程序地图功能还只是“摆设”吗?支付宝地图API的深度玩法都在这里了!

🏆本文收录于《滚雪球学支付宝小程序开发》专栏,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1820

Thread类、Runnable接口详解

前言 Thread类想必都不陌生,第一次学习多线程的时候就一定会接触Thread类。本篇主要从Thread类的定义、使用、注意事项、源码等方面入手,全方位的讲解Thread类。 Thread 我们经常会被问到这样一个问题: Java开启一个新线程有哪几种方法? 答案是两种:继承Thread类、实现Runnable接口。 说只有两种,有人可能就不服了,实现Callable接口为什么不算?线程池为...

Sicimike的博客 6491

FPGA开发中的操作系统

在FPGA开发中,操作系统起着关键的作用,它负责任务管理、资源管理、中断处理和设备驱动程序等功能。在实际的FPGA开发中,可以选择使用现有的操作系统,如MicroC/OS-II、FreeRTOS等,或者根据具体需求自行设计和开发操作系统。在FPGA(可编程逻辑门阵列)开发中,操作系统扮演着关键的角色,为硬件设计师提供了一种有效的方式来管理资源、调度任务并实现系统级功能。本文将介绍FPGA开发中的操作系统概念,并提供一个简单的示例代码来说明如何在FPGA平台上实现一个基本的操作系统。

CqpFsharp的博客 1156

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Callable和Runnable的区别

class c implements Callable<String>{ @Override public String call() throws Exception { return null; } } class r implements Runnable{ @Override public void run() { } } 相同点: ...

我秃了,也变强了。 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

使用Thead子类创建线程VS使用Thread直接创建线程(Runnable接口)的区别

while(ticket > 0) { System.out.println(Thread.currentThread().getName() + " 卖票:" + ticket--);System.out.println("线程执行:" + Thread.currentThread().getName());System.out.println("线程执行:" + Thread.currentThread().getName());1. 重写/实现 run():任务逻辑,不会主动开启新线程。

2401_88029502的博客 462

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Thread类的介绍

本文介绍了Java中线程的基本概念和创建方式。线程是操作系统中的执行流,Java通过Thread类封装了线程操作。文章详细讲解了6种创建线程的方法:继承Thread类、实现Runnable接口、匿名内部类、Lambda表达式、Callable接口与FutureTask、线程池(Executor框架)。同时阐述了Thread类的常用方法,包括start()启动线程、interrupt()中断线程、join()等待线程、sleep()休眠线程等。文章还分析了线程的状态转换(NEW、TERMINATED、RUNN

2302_80826557的博客 1139

使用Thread子类创建线程 vs 使用Thread直接创建线程(Runnable接口)的区别?

使用Thread子类创建线程 vs 使用Thread直接创建线程(Runnable接口)的区别?

zlc2077的博客 250

Java创建多线程(继承Thread类,实现Runnable接口,实现Callable接口,使用线程池)

Java创建多线程 Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现。 Thread类的特性 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体 通过该Thread对象的start()方法来启动这个线程,而非直接调用run() 创建多线程的四种方式 java中创建多线程的四种方式,分别是继承Thread类,实现Runnable接口,jdk5.0以后又增加了两种方式:实现Callable接口和使用线程池。 继承

qq_41117896的博客 4779

Java进阶(5)——创建多线程的方法extends Thread和implements Runnable的对比 &amp; 线程池及常用的线程池(4)

我们在程序里面调用了start()方法后,虚拟机会先为我们创建一个线程,然后等到这个线程第一次得到时间片时再调用run()方法。注意不可多次调用start()方法。在第一次调用start()方法后,再次调用start()方法会抛出IllegalThreadStateException异常。

2401_84563438的博客 791

Java多线程编程:从Thread、Runnable到线程池与并发安全实战

并发编程是现代软件开发的核心概念,它通过允许多个任务同时执行,显著提升了程序的响应速度和资源利用率。其基本原理在于操作系统将CPU时间片分配给多个线程,使得它们在宏观上看起来是并行运行的。这项技术的核心价值在于解决单线程程序因耗时操作导致的界面卡顿、吞吐量低等问题,尤其在服务器后端高并发处理、Android应用开发等场景中不可或缺。在Java生态中,实现多线程有多种方式,例如直接继承Thread类或实现Runnable接口来定义任务。然而,更优的工程实践是使用Callable配合Future获取异步计算结果

weixin_34323858的博客 324

Java进阶(5)——创建多线程的方法extends Thread和implements Runnable的对比 &amp; 线程池及常用的线程池(1)

核心线程数量和总线程数量相等,都是传入的参数nThreads,所以只能创建核心线程,不能创建非核心线程。当有任务需要执行时,线程池中的线程会被分配给任务,并在任务完成后返回线程池,以便可以被其他任务复用。创建一个可缓存的线程池,此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说VM)能够创建的最大线程大小。创建固定大小的线程池,每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。创建一个单线程的线程池,此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

2401_84563405的博客 1013

面试官笑了:线程start() 为什么不能再来一次?

结论:同一个 Thread 实例的 start() 只能调用一次,第二次会抛 IllegalThreadStateException。原因:线程状态一旦从 NEW 变为 RUNNABLE,就不可逆,重复调用会破坏线程生命周期管理。是因为线程状态机设计 + 操作系统资源绑定的机制。建议:需要重复执行任务时,使用新线程实例或线程池。线程组JVM。

fuladulu的博客 891

被自己蠢哭了的 Runnable.run()方法

之前一直都是用new Thread().start()方法跑线程,昨天撸代码的时候,想起听哪位大佬和我提过,实现Runnable接口比继承Thread类要好。那就实现接口试下吧,结果出问题了,回想起来,真是被自己蠢哭了。。。 我的代码: public class TestMain1 { public static void main(String[] args) { ...

Canon 2万+

Java如何通过Thread创建多线程测试程序(不包括线程池)

- Java通过Thread创建线程可分为4类: (1)继承Thread,重写run方法; (2)在Thread中写方法,构建Runnable类型,通过`::`或者`()->`构建; (3)实现Runnable接口,重写run方法; (4)实现Callable接口,重写call方法。 - 前三类无法获取方法返回值,第四类可以获取方法返回值。 - 启动线程使用start方法,该方法执行时有两个线程工作,即调用start的当前线程和调用run方法的其他线程(new Thread创建的线程)。

天然玩家的博客 3698
上一篇: android开发——不会被异常打断的线程休眠SystemClock.sleep()
下一篇: 创建有返回值的线程(Callable+FutureTask)
river66
博客等级 码龄8年 76粉丝 108原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值