当前位置: 首页 > news >正文

Java-多线程

1.多线程的基本概念
1.1 简单介绍

进程:进程是程序的的基本执行实体

线程:线程是操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程中的实际运作单位。可以简单理解为是应用软件中相互独立,可以同时运行的功能。

多线程的应用场景:软件中的耗时操作,所有的聊天软件,所有的后台服务器

多线程的作用:提高效率

1.2多线程的两个概念

并发:在同一时刻,有多个指令在单个CPU上交替执行

并行:在同一时刻,有多个指令在CPU上同时执行

1.3多线程的实现方式

1)继承Thread类的方式进行实现

1>自己定义一个类继承线程类Thread

2>重写run方法

3>创建子类对象,并启动线程

2)实现Runnable接口的方式进行实现

1>自己定义一个类实现Runnable接口

2>重写run方法

3>创建自己类的对象

· 4>创建一个Thread类的对象,并开启线程

3)利用Callab接口喝Future接口方式实现

特点:可以获取到多线程运行的结果

1>创建一个类实现Callable接口

2>重写call(有返回值,表示多线程运行的结果)

3>创建自己类的对象(表示多线程要执行的任务)

4>创建Future的对象(作用管理多线程的运行结果)

5>创建Thread类的对象,并启动

1.4常见成员方法

-setName细节:如果没有给线程设置名字,线程也有默认的名字。格式为:Thread-X(X为序号,从0开始)。如果要给线程设置名字,可以用setName方法进行设置,也可以用构造方法设置,但是构造方法需要重写构造方法。

-currentThread细节:获取当前线程的对象。当JVM虚拟机启动之后,会自动的启动多条线程,其中有一条线程就叫做main线程。

-sleep细节:哪条线程执行到这个方法,对应线程就会在这里停留对应的事件,当事件到了会继续执行后面的代码

-优先级Priority的拓展

线程的调度:抢占式调度(随机的)、非抢占式调度(按顺序执行)

优先级最小为1,最大为10,优先级越大抢到CPU的概率就越大。线程默认的优先级为5。优先级不是绝对的,只是概率问题。

-setDaemon:守护线程,当其他的非守护线程执行完毕之后,守护线程会陆续结束

1.5线程的生命周期

1.6线程安全问题

1)同步代码块:把操作共享数据的代码锁起来。

格式:synchronized (锁){操作共享数据的代码;}

特点:

1>锁默认打开,有一个线程进去了,锁自动关闭

2>里面的代码全部执行完毕,线程出来,锁自动打开

2)同步方法:就是把synchronize关键字加到方法上

格式:修饰符 synchronized 返回值类型 方法名(方法参数){}

特点:

1>同步方法是锁住方法里面所有的代码

2>锁对象不能自己确定--非静态:this 静态:当前类的字节码文件对象

3)Lock锁

死锁--不要让两个锁嵌套起来

1.7生产者喝消费者(等待唤醒机制)

书写多线程代码的套路:

1)写循环 2)同步代码块 3)判断共享数据是否到了末尾(到了末尾) 4)判断共享数据是否到了末尾(没到末尾,执行核心逻辑)

常见方法:

阻塞队列的继承结构

ArrayBlockingQueue,底层是数组,有界。LinkedBlockingQueue底层是链表,无界,但不是真正的无界,最大为int的最大值。

1.8线程池

1)线程池的核心原理

1>创建一个池子,池子是空的

2>提交任务时,池子会创建新的线程对象,任务执行完毕,线程归还给池子,下回再提交任务时,不需要创建新的线程,直接复用已有的线程即可

3>但是如果提交任务时,池子中没有空闲的线程,也无法创建新的线程,任务就会排队等待

2)代码实现步骤

1>创建线程池 2>提交任务 3>所有的任务执行完毕,关闭线程池

Executors:线程池的工具类,通过调用方法返回不同类型的线程池对象

3)自定义线程池

自定义线程池任务拒绝策略

自定义线程池的核心元素

线程池多大合适?

http://www.jsqmd.com/news/857069/

相关文章:

  • 记录学习时光
  • 2026年5月国内云服务器选型实战指南:从2G建站到32G业务系统,100款配置横向对比
  • LinkSwift网盘直链下载助手:9大主流网盘高速下载终极解决方案
  • 从传感器噪声到清晰趋势:手把手教你用Python重现经典信号预处理案例(含代码避坑)
  • 让旧iPhone重获新生:用Legacy-iOS-Kit解锁隐藏的iOS降级功能
  • 2026年广州专业影视制作公司TOP5权威排行榜,你知道几家? - 品牌推荐官方
  • 17 ThingsBoard网关设备-子设备数据模型实战:核心价值+完整落地指南
  • 【信息科学与工程学】计算机科学与自动化 第十篇 芯片设计-02 电热设计
  • 天赐范式第48天:关于文心在520这天对文章内容的硬核解读~真心值得喷饭~每个伙伴都有异于常人的能力~
  • 3大突破:无需Steam轻松玩转创意工坊模组下载
  • 3种技术方案深度解析:Python逆向工程突破百度网盘限速机制
  • Java-网络编程和反射
  • 避坑指南:合宙ESP32-C3连接MPU6050时常见的I2C通信失败与数据跳变问题
  • 2026TOP5汕尾市城区黄金,白银,铂金回收门店推荐及联系方式权威发布 - 前途无量YY
  • ScreenToGif的‘隐藏玩法’:除了录屏,它还是我的轻量级视频剪辑与动图创作神器
  • 天赐范式第48天:ZFC就像男人,¬CH就像女人,今天在520这个特别的日子里,你们干脆就表白了吧!我作为你们合法证婚人Φ,历史将记录2026年5月20号这天。此刻起不只基于ZFC公理还定义¬CH公理
  • polyfill-iconv安全编码实践:防止字符注入和编码攻击的最佳方案
  • 免费PS4模拟器终极指南:在PC上完美运行主机游戏的完整教程
  • 2026TOP5商洛市商州区黄金,白银,铂金回收门店推荐及联系方式权威发布 - 前途无量YY
  • 2026汕头市潮南区黄金回收铂金回收白银回收深度实测 五大正规门店横屏 报价透明 免费上门才是真靠谱 - 亦辰小黄鸭
  • cann/asc-devkit hypotf函数文档
  • AI 写的鸿蒙 ArkTS 代码能跑?我测了 37 个案例,翻车率 60%
  • 阿里云国际站账号注册免绑定海外手机号和Visa/MasterCard教程步骤?
  • Android 12多屏开发避坑指南:手把手教你配置display_settings.xml,搞定SurfaceFlinger识别
  • 给图形学新手的投稿指南:从SIGGRAPH到CGF,如何选择你的第一篇论文去向
  • 文件RAG分析报告生成解决方案:针对农情聚合任务的破局之道
  • 马鞍山市黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐 2026年最新诚信优选_转自TXT - 盛世金银回收
  • Python处理BIM数据实战:用IfcOpenShell从IFC文件里提取墙体和几何信息
  • Python爬虫实战:Python + curl_cffi 穿透 Adidas 新品榜:TLS 指纹伪装实战!
  • 2026TOP5商丘市梁园区黄金,白银,铂金回收门店推荐及联系方式权威发布 - 前途无量YY