Java中线程详解

news2024/11/22 14:31:04

文章目录

    • 相关概念
    • 多线程
      • 概念
      • 实现方式
        • 继承Thread类
        • 实现Runnable接口
        • 比较
    • 常用方法
    • 线程安全
      • 产生的原因
      • 解决思想
      • 同步
        • 同步代码块
        • 同步方法
        • Lock锁机制
      • 死锁
        • 概念
        • 避免
    • 状态
    • 线程间的通讯
      • 介绍
      • 方法

相关概念

并行:在同一时刻,有多个任务在多个CPU上同时执行
并发:在同一时刻,有多个任务在一个CPU上交替执行
进程:正在执行的程序
线程:应用程序中做的事情,是程序运行的基本执行单元
当操作系统执行一个程序时,会在系统中建立一个进程,该进程必须至少建立一个线程(这个线程被称为主线程),作为这个程序运行的入口点。因此,在操作系统中运行的任意程序都至少有一个线程。

多线程

概念

是指从软件或者硬件上实现多个线程并发执行的技术

实现方式

继承Thread类

Snipaste_2024-04-02_20-47-06.png

  1. 创建一个类继承Thread类
  2. 在类中重写run方法(线程执行的任务在该方法中)
  3. 创建线程对象,调用线程的start方法开启线程
实现Runnable接口

Snipaste_2024-04-02_20-47-44.png

  1. 定义一个类实现Runnable接口,并重写run方法(可以用匿名内部类实现)
  2. 创建任务对象
  3. 使用还有Runnable参数的构造方法创建线程对象并指定对象
  4. 调用线程的start方法,开启线程
比较
  1. 只能单继承,线程任务和线程功能都在Thread子类中
  2. 能多实现,线程任务在Runnable接口实现类中,线程功能在Thread类中;有解耦的好处

接口一是用来制定规则,二是用来降低耦合(紧密连接的程度)

常用方法

Snipaste_2024-04-02_21-21-41.png
Snipaste_2024-04-02_21-21-52.png

线程安全

产生的原因

多个线程对于同一个数据,进行读写操作,造成数据错乱

解决思想

把多个线程操作的共享数据,存放到一个安全的环境中
Java语言基于线程安全的问题,提供了同步机制

同步

同步代码块

Snipaste_2024-04-02_22-01-13.png

同步方法

Snipaste_2024-04-02_22-01-50.png

Lock锁机制

Snipaste_2024-04-02_22-03-13.png

死锁

概念

同步代码块的锁进行嵌套使用,就会大概率产生死锁

避免

不使用锁的嵌套

状态

Snipaste_2024-04-03_20-10-18.png
Snipaste_2024-04-03_20-10-41.png

线程间的通讯

介绍

通过等待和唤醒机制,来实现多个线程协调操作完成某一项任务
等待唤醒机制其实就是让线程进入等待状态或者让线程从等待状态中唤醒

方法

  • 等待方法
    • 特殊之处:会释放掉对象锁
wait() //无限等待,(只能其他线程唤醒)
wait(Long 毫秒) //计时等待(时间到了自动唤醒)
  • 唤醒方法
    • 特殊之处:不会释放掉对象锁
notify() //唤醒处于"等待状态"的任意一个线程
notifyAll() // 唤醒处于"等待状态"的所以线程

注意

  1. 等待和唤醒的方法,都要使用锁对象调用(需要在同步代码块中使用)
  2. 等待和唤醒方法应该使用相同的锁对象调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1566510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVASE】学习类与对象的创建和实例化

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 目标: 1. 掌握类的定义方式以及对象的实例化 2. …

QML嵌套页面的实现学习记录

StackView是一个QML组件,用于管理和显示多个页面。它提供了向前和向后导航的功能,可以在堆栈中推入新页面,并在不需要时将页面弹出。 ApplicationWindow {id:rootvisible: truewidth: 340height: 480title: qsTr("Stack")// 抽屉:…

语义分割交互式智能标注工具 | 澳鹏数据标注平台

随着人工智能应用的大规模落地,数据标注市场在高速增长的同时,也面临着标注成本的挑战。据IDC报告显示:数据标注在AI应用开发过程中所耗费的时间占到了25%,部分医学类应用一条数据的标注成本甚至高达20元。数据精度的高要求、强人…

【Django学习笔记(五)】JQuery介绍

JQuery介绍 前言正文1、JQuery 快速上手1.1 下载 JQuery1.2 应用 JQuery 2、寻找标签(直接)2.1 ID选择器2.2 样式选择器2.3 标签选择器2.4 层级选择器2.5 多选择器2.5 属性选择器 3、寻找标签(间接)3.1 找到上一个兄弟3.2 找父子 …

浪潮分布式存储AS13000G6-M36改扩配后管理界面不能识别和标记硬盘的处理方法

AS13000G6 改配出问题的场景 浪潮分布式存储AS13000G6-M36渠道备货的分布式存储通常是流量机型,实际出货可能会涉及改配 集群部署完以后建议在系统视图下查看一下盘是否能识别 这个是正常的情况,可以正确管理到盘,硬盘侧边有绿色的指示灯。 如图是管理…

【Linux】进程控制详解

目录 前言 进程创建 认识fork 写时拷贝 再谈fork 进程终止 进程退出码 用代码来终止进程 常见的进程终止的方式 exit _exit 进程等待 进程等待的必要性 进程等待的方式 wait waitpid 详解status参数 详解option参数 前言 本文适合有一点基础的人看的&#…

计算机笔记(3)续20个

41.WWW浏览器和Web服务器都遵循http协议 42.NTSC制式30帧/s 44.三种制式电视:NTSC,PAL,SECAM 45.IP,子网掩码白话文简述: A类地址:取值范围0-127(四段数字(127.0.0.0&#xff09…

Oil Deposits (DFS BFS)

//新生训练 #include <iostream> #include <algorithm> #include <cstring> #include <queue> using namespace std; using PII pair<int, int>; const int N 205; int n, m; int dis[N][N]; int dx[] {0, 0, -1, 1, -1, 1, -1, 1}; int dy[]…

JAVAEE之Spring, Spring Boot 和Spring MVC的关系以及区别

1.Spring, Spring Boot 和Spring MVC的关系以及区别 Spring: 简单来说, Spring 是⼀个开发应⽤框架&#xff0c;什么样的框架呢&#xff0c;有这么⼏个标签&#xff1a;轻量级、⼀ 站式、模块化&#xff0c;其⽬的是⽤于简化企业级应⽤程序开发 Spring的主要功能: 管理对象&am…

《pytorch深度学习实战》学习笔记第1章

第1章 深度学习和pytorch库简介 1.1 深度学习革命 机器学习依赖特征工程。而深度学习是从原始数据中自动找出这样的特征。 1.2 pytorhc深度学习 pytorch是一个python程序库。pytorch为深度学习提供了入门指南。pytorch的核心数据结构——张量&#xff0c;为一个多维数组&…

slowhttp攻击漏洞原理解析和防御,以及LiqunKit 综合漏洞利用工具详细使用

slowhttp攻击漏洞原理解析和防御,以及LiqunKit 综合漏洞利用工具详细使用。 Slowhttp攻击是一种拒绝服务(DoS)攻击,它利用了HTTP协议的一些特性来耗尽服务器资源,导致服务器对正常请求的响应变慢或无法响应。这种攻击的特点是长时间占用服务器的连接,而不是发送大量流量…

网工内推 | 国企运维,IA认证,大专以上即可,最高22K

01 深圳建广数字科技有限公司青岛分公司 招聘岗位&#xff1a;桌面运维工程师 职责描述&#xff1a; 1.根据运维服务请求完成关于操作系统、应用软件、办公设备、网络等方面的安装、管理与维护&#xff1b; 2.各种PC软硬件故障诊断、排查及升级&#xff1b; 3.桌面设备&…

爬虫 红网时刻 获取当月指定关键词新闻 并存储到CSV文件

目标网站&#xff1a;红网 爬取目的&#xff1a;为了获取某一地区更全面的在红网已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 环境&#xff1a;Pycharm2021&#xff0c;Python3.10&#xff0c; 安装的包&#xff1a;requests&#xff0c;csv&#xff0c;bs4&…

锂电池充电电压4.2V,那么充电器升压到9V、12V意义何在?

锂电池充电电压4.2V&#xff0c;那么充电器升压到9V、12V意义何在&#xff1f;PD、QC等快充又是如何工作&#xff1f;带着这些问题&#xff0c;笔者阅读了一些大佬的分析&#xff0c;在此整理下来&#xff0c;并略抒愚见。 手机快充协议简介&#xff0c;PD&#xff0c;PE&#…

01-XML-04XML处理

XML处理 DOM DOM解析要求解析器将整个XML文件全部加载到内存中&#xff0c;生成一个Document对象。 优点&#xff1a;元素和元素之间保留结构&#xff0c;关系&#xff0c;可以针对元素进行增删改查操作。 缺点&#xff1a;如果XML文件过大&#xff0c;可能会导致内存溢出。SA…

自动驾驶之心规划控制笔记

Search-based Path Planning Methods Path Finding Problem 一般来说指标有距离,耗费时间,能量,或者多目标。 左图是拓扑地图,蓝色的点就是顶点,绿色的线是连接关系。最后得到的是一个从哪里走的一个最优,并非精细解。 右图是栅格地图,这个搜索出来的是在相对分辨率比…

vue快速入门(四)v-html

注释很详细&#xff0c;直接上代码 上一篇 新增内容 使用v-html将文本以html的方式显示 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …

147.【2024Java八股-全网最全-10w字】

100道Java经典面试题 (一)、准备篇1.HR如何筛选简历?2.部门负责人如何筛选简历?3.简历模块布局4.应届生如何找到合适的练手项目?5.深入学习哪些业务模块呢?6.Java程序员的面试过程 (二)、Redis篇1.redis经常使用在哪些场景?2.Redis进行查询的流程是什么?3.什么是缓存穿透…

软件设计师28--SQL语言

软件设计师28--SQL语言 考点1&#xff1a;普通查询SQL语言SQL语言 - 查询例题&#xff1a; 考点2&#xff1a;分组查询SQL语言 - 查询例题&#xff1a; 考点3&#xff1a;权限控制SQL语言例题&#xff1a; 考点1&#xff1a;普通查询 SQL语言 SQL语言 - 查询 例题&#xff1a;…

又一AI工具开源!企业应该如何搭上这趟AI快车

大模型技术在近两年来飞速发展&#xff0c;企业对大模型的认知更加理性、务实。大模型本身不会直接产生价值&#xff0c;但在大模型基础架构之上开发出的AI应用&#xff0c;带来技术创新及业务增长&#xff0c;成为企业真正关心的问题。 基于大模型开发的又一个AI工具诞生&…