java高级编程之多线程【超详细,有这一篇就够了!!!】

news/2024/9/19 7:56:36/ 标签: java, jvm, 算法, 青少年编程, 开发语言, eclipse, idea

多线程

多条执行路径,主线程和子线程并行交替执行

program:程序

process: 进程

Thread:线程

进程是系统分配资源的最小单位,线程是CPU调度和执行的最小单位

什么是线程

线程是由进程创建的,是进程的一个实体,一个进程可以有多个线程(线程也可以创建一个新的线程)

单线程:同一个时刻只允许执行一个线程

多线程:同一时刻可以执行多个线程

  • 并发:同一个时刻,多个任务交替执行,造成一种同时执行的错觉,单核CPU实现的多任务就是并发

  • 并行:同一个时刻,多个任务同时执行,多核CPU可以实现并行

进程中所有线程都结束进程才会结束,主线程结束的时候如果还有其他子线程还在运行的话,进程继续运行,直到所有线程全部结束

线程创建

java"> class Student extends Thread{}Stuedent student = new Student();student.star();Class Student implement Runnable(){}Student student = new Student();Thread thread = new Thread(student);thread.star();

线程终止

java"> Class Student implement Runnable(){private boolean loop = true;public void setLoop(boolean loop){this.loop = loop;}public void run(){while(loop){}}}Class main{public static void main(String args[]){Student student = new Student();Thread thread = new Thread(student);thread.star();Thread.sleep(10000); //休眠10秒student.setLoop(false); 将while循环条件变为false,结束循环 }}​

线程常用方法

说 明
void setPriority(int newPriority)更改线程的优先级
static void sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠
void join()当前线程变为执行状态,其他线程需要等当前线程执行完之后才能继续执行
static void yield()暂停当前正在执行的线程对象,并执行其他线程(礼让,当前线程变为就绪状态,可能又被分到CPU继续执行)
void interrupt()中断线程(可以提前结束线程的休眠)
boolean isAlive()测试线程是否处于活动状态
setDaemon(true)将线程设置为守护线程,除他之外的所有线程结束,此线程跟着结束
String getState()返回当前线程的运行状态

Synchronized 关键字

使用synchronized修饰的方法控制对类成员变量的访问

 访问修饰符 synchronized 返回类型 方法名(参数列表){……}//或者synchronized 访问修饰符 返回类型 方法名(参数列表){……}
  • synchronized就是为当前的线程声明一把锁

多个并发线程访问同一资源的同步代码块时

  • n同一时刻只能有一个线程进入synchronized(this)同步代码块

  • n当一个线程访问一个synchronized(this)同步代码块时,其他synchronized(this)同步代码块同样被锁定

  • n当一个线程访问一个synchronized(this)同步代码块时,其他线程可以访问该资源的非synchronized(this)同步代码

线程安全

方法是否同步效率比较适合场景
线程安全多线程并发共享资源
非线程安全单线程

StringBuffer:线程安全,速度慢

StringBuilder:非线程安全,速度快


http://www.ppmy.cn/news/1523562.html

相关文章

CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!

一、CTF简介 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…

java八股!1

集合 目录 集合java中存在哪些集合?底层实现逻辑?哪些集合是线程安全的?集合的对比:hash冲突如何解决hashmap为什么线程不安全,如何实现安全?hashmap中循环链表的产生hashmap底层实现原理和扩容机制map的遍…

[数据集][目标检测]石油泄漏检测数据集VOC+YOLO格式6633张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):6633 标注数量(xml文件个数):6633 标注数量(txt文件个数):6633 标注…

使用 LlamaIndex 进行 CRAG 开发用来强化检索增强生成

提升AI模型的准确性与可靠性 介绍 检索增强生成(RAG)彻底改变了使用大语言模型和利用外部知识库的方式。它允许模型从文档存储的相关索引数据中获取信息用以增强其生成的内容,使其更加准确和信息丰富。然而,RAG并非完全无缺。它…

基于Java的旅游网站的设计与实现---附源码80706

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2开发现状 1.3论文结构与章节安排 2 旅游网站系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4…

TikTok内容电商:短视频与直播带货如何重塑消费者购物决策

数字化时代,内容电商已经成为一种重要的商业模式。而TikTok作为全球领先的短视频平台,其内容电商模式正慢慢改变用户的消费习惯。TikTok Shop作为TikTok平台上的电商板块,也凭借其独特的短视频和直播带货模式,影响着消费者的购物决…

什么是跨站脚本攻击(XSS)和跨站请求伪造(CSRF)?

跨站脚本攻击(XSS)和跨站请求伪造(CSRF)是两种常见的网络安全威胁,它们利用网站和用户浏览器之间的交互来实施攻击。 跨站脚本攻击(XSS) 定义: 跨站脚本攻击(Cross-Site…

QT 读取Excel表

一、QAxObject 读取excel表的内容&#xff0c;其仅在windows下生效&#xff0c;当然还有其他跨平台的方案。 config qaxcontainer #include <QAxObject>QStringList GetSheets(const QString& strPath) {QAxObject* excel new QAxObject("Excel.Application&…

csdn上传md,图片转存失败

我们通常会使用typora等工具编写markdown笔记&#xff0c;其中难免会插入很多图片&#xff0c;为了使文档上传到其他平台也能显示图像&#xff0c;一般都会配置图床。我之前一直是这么做的。但是最近发现配置完图床的图片还是会出现图片转存失败的问题&#xff0c;如下图 但是在…

Android 使用JSON动画:Lottie框架基本使用

Lottie是什么? GitHub的一种跨平台动画解决方案三方框架 使用? 3步 1.引入最新的依赖:https://github.com/airbnb/lottie-android 我写文章时最新版本是6.5.2 添加到 app/build.gradle 文件的以下方法中dependencies {//lottie 动画implementation com.airbnb.android:l…

AI 大模型启蒙秘籍:深度知识点剖析,小白必藏实用宝典!

一、大模型的定义 大模型&#xff0c;通常指的是大语言模型&#xff08;Large Language Model&#xff0c;简称 LLM&#xff09;&#xff0c;以 OpenAI 的 GPT 系列为典型代表&#xff0c;主要应用于自然语言处理领域。然而&#xff0c;随着技术的不断进步&#xff0c;大模型的…

如果电脑一直提示微软账号登录……

前言 今天小白接了个电脑故障问题&#xff1a;电脑提示微软账号登录&#xff0c;然后经过各种操作…… 电脑重启之后就变成了这样&#xff1a; 按理说&#xff0c;登录了微软账号之后&#xff0c;Windows系统要进入到桌面就必须有一个输入密码验证的过程&#xff0c;但这个界…

uniapp业务实现

uni.requset添加异常判断提示,以及加载动画 /*** 该函数用于发送网络请求获取数据* 请求失败时会弹出相应的错误提示* 请求成功时会检查返回的数据是否存在错误&#xff0c;并根据错误代码做出相应处理* 如果数据请求成功且无错误&#xff0c;则将返回的数据赋值给pets变量*/fu…

王道考研操作系统笔记(一)

虚拟内存的定义和特征&#xff1a; 基于局部性的原理&#xff0c; 在程序装入时&#xff0c;可以将程序中很快用到的部分装入内存&#xff0c;暂时用不到的数据装入外存&#xff0c;就可以让程序开始执行&#xff0c;在程序执行过程中&#xff0c;当所访问的信息不在内存的时…

NPU是什么?特点及应用

一.概述 1.NPU介绍 NPU&#xff08;Neural Processing Unit&#xff0c;神经处理单元&#xff09;是一种专门设计用于加速神经网络和深度学习算法的计算芯片或处理器。它针对神经网络中的大量矩阵运算和并行处理需求进行了优化&#xff0c;以提高计算效率和降低功耗。 随着人工…

【运维监控】Prometheus+grafana监控spring boot 3运行情况

本示例通过spring boot自带的监控信息暴露出来&#xff0c;然后将数据收集到prometheus中&#xff0c;最后通过grafana的dashboard导入模板进行可视化。本示例分为四个部分&#xff0c;即prometheus、grafana部署、springboot示例和最后的集成。说明&#xff1a;本示例中的部署…

什么是内存溢出,golang是如何解决内存溢出的

什么是内存溢出&#xff1f; 内存溢出&#xff08;Memory Overflow&#xff09;是指程序在运行时超出了分配给它的内存限制&#xff0c;从而导致程序异常或崩溃的现象。通常&#xff0c;内存溢出是由于以下原因引起的&#xff1a; 内存泄漏&#xff1a;程序分配了内存但没有及…

C# 特性(Attributes)和反射(Reflection)

特性 在C#中&#xff0c;特性&#xff08;Attributes&#xff09;是一种向代码添加元数据的机制。这些元数据可以在编译时被编译器读取&#xff0c;或者在运行时通过反射&#xff08;Reflection&#xff09;被读取。特性提供了一种灵活的方式来添加注释信息&#xff0c;并且可…

ICLR2024: 大视觉语言模型中对象幻觉的分析和缓解

https://arxiv.org/pdf/2310.00754 https://github.com/YiyangZhou/LURE 背景 对象幻觉&#xff1a;生成包含图像中实际不存在的对象的描述 早期的工作试图通过跨不同模式执行细粒度对齐&#xff08;Biten et al.&#xff0c;2022&#xff09;或通过数据增强减少对象共现模…

汽车电子行业知识:关于域控制器

车载域控制器&#xff08;Vehicle Domain Controller, VDC&#xff09;是现代汽车电子架构中的关键组件&#xff0c;负责整合和管理多个电子控制单元&#xff08;ECU&#xff09;&#xff0c;以提高车辆的智能化和自动化水平。 1. 定义与功能 车载域控制器是一个集中式的计算…