Java多线程应用(1)

从0到1理解Java多线程:核心原理与实战应用 状态转换的核心逻辑:线程通过start()进入Runnable状态,因竞争资源进入Blocked/Waiting状态,任务执行完毕后进入Terminated状态。• 继承Thread类:重写run()方法,通过start()启动线程(注意:直接调用run()不会开启新线程,只是普通方法调用)。简单来说,进程是“工厂”,线程是“工厂里的工人”——一个工厂可以有多个工人协作,共享工厂的设备和原料。• 线程:进程内的执行单元,共享进程资源,线程切换仅需保存上下文信息,开销远小于进程。 阅读详情

目标:掌握多线程的使用及应用场景

  • 怎么使用多线程

    // 尽量不要如此使用
    new Thread(new Runnable() {
           @Override
           public void run() {
    
           }
    }).start();
    // 通过线程池方便管理
    Executor executor = Executors.newCachedThreadPool();
    executor.execute(runnable);
    
  • 进程和线程的区别

    其实没有可比性,之所以大家喜欢用来比较是因为他们都可以并行,两个进程可以并行,两个线程也可以并行,所以大家喜欢用来对比。

    但其实差别还是比较大的,进程在操作系统中是拥有独立空间的,并且进程间是不共享的,而一个进程中可能会包含很多个线程,而线程间是可以共享资源。

  • CPU线程与操作系统的线程怎么理解

    CPU线程就是我们平时听到的几核CPU的概念,比如6核的CPU,它的CPU线程就是6,它表示CPU同时只能干六件事,而我们代码中所开的线程其实是操作系统的线程,操作系统通过时间分片可以将线程开的很多很多。

  • ThreadPoolExecutor

    以ThreadPoolExecutor为例,他的构造函数里面会有几个重要的参数:

     

  • 第一个参数corePoolSize表示该线程池需要保留的线程数量,即使在空闲的时候。

    maximumPoolSize表示当前线程池最大可以拥有多少个线程,当线程池中开到最大,并且所有线程都在执行任务,此时如果有任务来了,就需要等待线程池中有空闲的线程释放出来。

    keepAliveTime表示当线程池中超过corePoolSize的部分,在空闲状态时可以继续保留的时间,一旦超过这个时间就会销毁。

    timeUnit表示上面参数的时间单位

    workQueue显然就是线程池正在满池运行,新的待执行任务需要放在这个队列里等待空闲线程的到来。

  • newFixedThreadPool(int nThreads)

    这个方法是用来创在保持特定数量的线程池,因为这个数量是既是线程池的最大线程数,也是线程池需要保留的线程数,所以,线程也不好增加,在空闲状态时也不能回收多余的。

    所以它的应用场景也是比较少的,一般是用来集中处理一些爆发性的事物后立即释放,比如突然来了20张图片要处理,这个时候肯定不能一张一张的处理,可以开多线程并行处理,如下所示:

    List<Bitmap> imgs = somewhereGetImgs(20);
    ExecutorService executor = Executors.newFixedThreadPool(20);
    for(Bitmap bitmap: imgs) {
    	// 向线程池中扔了20个任务同时执行
    	executor.execute(processImgRunnable);
    }
    // 执行完就快速的回收
    executor.shutdown();
    
  • Callable

    有返回值的Runnable。

    举个例子:

  •  

    既然要放到异步线程里去执行,那返回结果又有什么意义呢,难道要阻塞主线程一直等任务线程执行完?

    上面的例子就说明了部分使用场景,我们可以先拿到一个future的实例来在后面进行判断是否任务执行完了(当然,不一定是上面死循环的方式),实际可以根据具体业务来做。

UE5实战:如何用Mesh Shader优化你的游戏场景渲染(附性能对比) 本文深入探讨了在UE5中利用Mesh Shader优化游戏场景渲染的实战方法。通过对比传统渲染管线与GPU Driven Pipeline,详细阐述了Mesh Shader如何通过任务着色器和网格着色器两阶段并行处理,实现更精细的meshlet级剔除,从而显著降低Draw Call和GPU带宽,提升渲染性能。文章附有具体的性能对比数据与代码示例,为开发者优化高复杂度场景提供了有效路径。 阅读详情

相关推荐

扫地机的CPU只要二十多块?2024第二拆来了

昨天还说到这个机器人的故障,经小鱼拆机后测试和后台网友留言确认,不是防跌落问题,是轮子故障,这个轮子不会动,轮子上有一个限位开关检测机器人是否离开地面的,测试的时候也没有误触发,所以电机存在故障,后面拆电机的时候再检查。最后再留下一个疑问,这个机器人的回充没有用红外管,机器人是如何识别基站进行返回充电的(因为只买了本体,没买充电桩,不确定充电桩的形状,是不是利用点云识别不确定)懂的请留言。全志的R16,封装是 BGA282,那这个板子至少是4层板,小鱼盲猜 6 层板,知道的小伙伴欢迎留言。

生活不止眼前的苟且 1974

【Java多线程的使用详解】

Java多线程的使用详解

Java之行 2741

从零到一:高通Memory QMVS测试环境搭建的避坑指南

本文详细介绍了高通Memory QMVS测试环境搭建的全流程避坑指南,涵盖硬件选择、软件配置、QMVS核心组件安装及测试执行技巧。重点解析了adb工具配置、QPST日志抓取等关键步骤,帮助工程师高效搭建稳定测试环境,避免常见兼容性和稳定性问题。

weixin_29251567的博客 555

JAVA进阶学习笔记(1):多线程

1 基本概念 1.1 程序 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 1.2 进程 进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态 的过程:有它自身的产生、存在和消亡的过程。——生命周期 进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域 。 1.3 线程 线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。 1.若一个进程同一时间并行执行多个线程,就是支持多线程的 2.线程

LeavingBook的博客 900

详解岭回归与L2正则化

最小二乘法存在不可逆和病态问题,导致解析解不可计算或不稳定,岭回归是一种有效的解决方法,以损失无偏性来换取稳定解, 本文介绍详细介绍了岭回归的基本原理,并从L2正则化角度来进行了解释。

Luoyingfeng的博客 1万+

Unity开源游戏源码精选:17个亲测可运行教学项目

Unity游戏开发中,掌握真实项目结构与工程实践远比熟记API更重要。本文围绕‘Unity开源项目’和‘游戏源码’两大核心概念,解析高质量开源资源的本质特征——结构清晰、逻辑可溯、修改即时反馈。从基础的MonoBehaviour生命周期组织,到进阶的ScriptableObject数据驱动、事件总线解耦,再到架构级的DOTS ECS设计与网络同步模式,技术价值在于将抽象原理落地为可调试、可验证、可迁移的代码范式。适用于新手建立开发直觉、中级开发者突破系统设计瓶颈,以及团队构建可维护框架。所有项目均基于Uni

weixin_31528001的博客 716

Java中多线程的应用场景

Java中的多线程应用主要包括并发处理、资源共享和异步编程等场景。多线程可以提高程序的处理能力,实现对共享资源的并发访问以及实现异步操作。在多线程编程中,常见的问题包括线程安全问题、死锁问题、上下文切换问题、数据同步问题和过度创建线程问题。1. 为了解决线程安全问题,可以使用同步机制(如synchronized关键字、Lock对象)、使用线程安全的数据结构或避免共享状态。2. 为了解决死锁问题,需要避免循环等待资源、按照固定顺序获取资源或设置超时时间等。

m0_56186047的博客 4564

简单的服务器取证

记一次入门服务器取证——药品直销网,涵盖旧版本宝塔、静态IP的配置更改、代码的理解

m0_74559567的博客 3756

java多线程使用详解与案例,超详细

答:多线程同时操作同一临界资源,导致结果存在的不准确性。

m0_51487124的博客 3050

R语言新手也能搞定!WGCNA分析全流程代码详解(附常见报错解决方案)

本文为R语言新手提供了WGCNA分析的完整代码流程与实战指南。从环境配置、数据准备、软阈值选择、网络构建到模块-表型关联分析,逐步详解核心步骤。重点针对安装依赖、内存不足等常见报错提供了具体解决方案,帮助初学者避开陷阱,顺利完成加权基因共表达网络分析。

terraform7cloud的博客 539

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

AI人人懂 369

java多线程的简单应用

操作系统运行一个程序时,会为其创建一个进程,线程是系统工作调度的最小单位,一个进程运行时可能会有一个或者多个线程在工作。线程拥有各自的计数器、堆栈和局部变量等属性,且能够访问共享的内存变量。...

qq_36700462的博客 949

【调优】OpenClaw调优之模型(tokens)篇

OpenClaw用户常遇四大痛点:规则被无视、API账单暴涨、低效模型选择、记忆丢失。通过/context list命令可解析上下文组成,包括工作区配置、引导参数限制、系统提示词等关键信息。重点需关注Token消耗来源,如核心配置文件、技能工具说明等,避免静默截断。建议精简非必要内容,优化记忆机制,平衡功能与成本。该分析帮助用户减少无效操作,合理控制API支出。

海兰 989

1、Java多线程应用

Java多线程应用 什么是进程? 进程是操作系统的结构,是一次程序的执行,是程序在一个数据集合运行的过程,是系统的进行资源分配和调度的独立单位? 什么是线程? 线程是进程中具体的搬运工,由进行分配资源进行调度,单个线程必须一个执行完成后,才能执行另外一个,但是多线程操作系统windows,就可以在一个任务执行处于等待的时候,cpu空闲的时间去执行另外一个任务,各个任务之前的快速切换,可以造成,...

天下没有难写的代码 315

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java同步和多线程1:多线程的基本操作及synchronized的应用

其实Java多线程中,锁只是一个很抽象的概念。锁是为了实现互斥和同步而设的。“锁”打个比方,获取锁可认为是“获取做某个事情的权限”,而“释放锁”可以认为是把做某件事情的权限交给别人了。也可以这样认为,“锁”锁住的是某个事物。获取锁指的是获得解开这个锁的钥匙,可以对这个事情进行操作,而释放锁是把这条钥匙给别人,或者放回某个钥匙柜子里,等别人来取。Java中锁的机制,是为了在多线程中实现同步互斥。如果...

Gensoukyo 1636

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

多线程1---java多线程入门以及简单应用

多线程快速入门 线程与进程区别 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。 使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等.

weixin_42243829的博客 238

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

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

JAVA多线程系列需求应用场景1

需求如下图所示: 等我研究完成多线程以后,会来解决这个问题。也希望高人能够给出解决方案。

极客蓝天 2052

java多线程创建实例_Java多线程学习笔记1——创建线程和应用小案例

多线程学习笔记1——创建线程和应用小案例Thread类定义了多种方法管理线程,以下是几种常用方法:方法意义getName()获得线程名称getPriority()获得线程优先级isAlive()判断线程是否在运行join()等待一个线程终止run()线程的入口点sleep()在一段时间内挂起线程start()通过调用运行方法来启动线程创建线程可以通过继承Thread类(创建Thread类的子类),...

weixin_39892311的博客 157

java程序应用1 -- 多线程

1. 进程与线程 进程时程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程。 线程是比进程更小的执行单位,线程是进程内部单一的一个顺序控制流 2. 认识线程 2.1 通过继承Thread类实现多线程,复写run方法 2.2 通过实现runnable接口实现多线程 3. 线程的状态 创建、就绪、运行、阻塞、终止 new Thread()、start()、sl

Chopper6的专栏 502

JAVA基础--Thread多线程简单应用(1)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34199335的博客 133

【多线程高并发编程】四 java(jdk1.8)五种线程池,你都知道具体的应用场景吗?

本文通过查看源码,查看java的5种线程池,并了解他们的概念,并通过实际的代码进行论证。

程序猿学社的博客 5182

【java多线程】Java1.5后的多线程框架

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34281477的博客 89

Java多线程编程实战指南+设计模式篇pdf

下载地址:网盘下载 随着CPU 多核时代的到来,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案。然而,多线程编程相关的设计模式书籍多采用C++作为描述语言,且书中所举的例子多与应用开发人员的实际工作相去甚远。《Java多线程编程实战指南(设计模式篇)》采用Java(JDK1.6)语言和UML 为描...

weixin_30602505的博客 302

java多线程二

JDK1.5提供了多线程升级解决方案 将同步Sunchronized替换成Lock操作。 将Object中的wait,notify notifyAll ,替换了Condition对象. 该对象可以Lock锁进行获取。 在实例中,实现了本方只唤醒对方操作 import java.util.concurrent.locks.*; class Consumer implements R

hht7915的专栏 325

executors java 深圳_Java多线程之ExecutorService

讲到Java多线程,大多数人脑海中跳出来的是Thread、Runnable、synchronized……这些是最基本的东西,虽然已经足够强大,但想要用好还真不容易。从JDK 1.5开始,增加了java.util.concurrent包,它的引入大大简化了多线程程序的开发(要感谢一下大牛Doug Lee)。 java.util.concurrent包分成了三个部分,分别是java.util.conc...

weixin_39524247的博客 97

GitHub上120K Stars国内第一的Java多线程PDF到底有什么魅力?

GitHub上120K Stars国内第一的Java多线程PDF到底有什么魅力?

weixin_71682097的博客 233
上一篇: 史上最通俗易懂的HTTPS小故事
下一篇: Java多线程编程(2)之线程同步
IT烂笔头
博客等级 码龄15年 621粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值