Day24 多线程

AWD线下攻防赛总结 在本地组策略编辑器里面,依次展开计算机配置—>管理模板—>Windows组件—>远程桌面服务—>远程桌面会话主机—>连接—>限制连接的数量。8.Web目录环境查找相关可疑文件:jpg/png/rar,属性、解压。进程线程:netstat / ps -aux/netstat -apt。4.查看/etc/init.d/rc.local中启动服务有无异常。1.不使用默认口令,修改成复杂的,并确保和web环境连接。5.使用脚本开启进程监控、目录监控、流量监控。文件操作监控.exe/御剑文件监控.exe。 阅读详情

1.多线程

1.1 程序、进程、线程

程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一 段静态的代码,静态对象。

进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态

的过程:有它自身的产生、存在和消亡的过程。——生命周期

如:运行中的QQ,运行中的MP3播放器

程序是静态的,进程是动态的

进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域

线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。

若一个进程同一时间并行执行多个线程,就是支持多线程的

线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开

销小

一个进程中的多个线程共享相同的内存单元/内存地址空间à它们从同一堆中分配对象,可以 访问相同的变量和对象。这就使得线程间通信更简便、高效。但多个线程操作共享的系统资 源可能就会带来安全的隐患。

示意图:

1.2 单核CPU、多核CPU

a)单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程 的任务。例如:虽然有多车道,但是收费站只有一个工作人员在收费,只有收了费 才能通过,那么CPU就好比收费人员。如果有某个人不想交钱,那么收费人员可以 把他“挂起”(晾着他,等他想通了,准备好了钱,再去收费)。但是因为CPU时 间单元特别短,因此感觉不出来。

b)如果是多核的话,才能更好的发挥多线程的效率。(现在的服务器都是多核的)

c)一个Java应用程序java.exe,其实至少有三个线程:main()主线程,gc() 垃圾回收线程,异常处理线程。当然如果发生异常,会影响主线程。

1.3 并发和并行

并行:多个CPU同时执行多个任务。比如:多个人同时做不同的事。

并发:一个CPU(采用时间片)同时执行多个任务。比如:秒杀、多个人做同一件事1

1.4 优点

背景:以单核CPU为例,只使用单个线程先后完成多个任务(调用多个方 法),肯定比用多个线程来完成用的时间更短,为何仍需多线程呢?

多线程程序的优点:

1.提高应用程序的响应。对图形化界面更有意义,可增强用户体验。

2.提高计算机系统CPU的利用率

3.改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和

修改

1.5 应用场景

程序需要同时执行两个或多个任务。

程序需要实现一些需要等待的任务时,如用户输入、文件读写操作、网络操作、搜索等。

需要一些后台运行的程序时。

1.6 创建线程

  创建线程有两种方式
  1 继承Thread类 并覆写run方法 , run方法 就等于是 新线程中的main方法
  2 实现Runnable接口 并实现run方法
  
  启动线程 : 手动调用线程对象的 start() 方法
                     注意 : 不是调用run方法,而是调用start方法
                              如果调用run方法,并不是启动线程的,只是一个单纯的方法调用
                              当我们调用start方法的时候,会自动开启新的线程并调用run方法

1.6.1 Thread

1.6.2 Runnable 

1.7 常用方法 

 start(): 启动线程的唯一方式
  
  setName(): 设置线程的名字 默认是Thread-0,Thread-1...
  
  getName(): 获取线程的名字
 
  setPriority(): 设置线程优先级
  
  getPriority(): 获取线程优先级
  
  static currentThread(): 获取当前线程的内存地址
  
  static sleep(): 睡眠当前线程,参数是睡眠的毫秒数

   静态的,和用那个对象没关系,写在哪个线程中,就获取哪个线程对象,就睡眠哪个线程
    

                           

1.8 生命周期 

JDK中用Thread.State类定义了线程的几种状态

要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类 及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五 种状态:

新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建 状态

就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源

运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态, run()方法定义了线 程的操作和功能

阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出 CPU 并临时中止自己的执行,进入阻塞状态

死亡:线程完成了它的全部工作或线程被提前强制性地中止或出现异常导致结束

1.9 终止线程 

1.10 线程控制 

 

1.11 线程同步

1.11.1 概述

当多个线程有可能操作同一个数据的时候,为了考虑数据的一致性和安全性,需要进行同步机制,尤其是更改操作,查询无所谓,因为查询不会对数据发生更改

1 同步代码块

Synchronized(对象){

// 需要同步的代码

}

2 还可以锁方法,使用synchronized 修饰方法即可

1.11.2 多线程可能出现的问题 

因为多线程并行问题,导致多个线程操作了同一个数据,导致结果不一致

1.11.3 如何解决 

1.12 Lock

1.12.1 概述

1 Lock 是显式锁,需要手动开启和手动关闭,而synchronized是隐式锁,除了作用域,自动解锁

2 Lock 只有代码块锁,而synchronized可以代码块锁,可以方法锁

3 使用Lock还有更多功能扩展

1.12.2 使用

1.13 死锁

1.13.1 概述

1.13.2 原理 

 死锁 : 就是大家在执行过程中,都遇到了对方进入加锁的方法,从而导致都访问不了的状态
  
  1 某个线程执行完成 , 需要 先后 嵌套 锁定两个对象,在这个过程中,该线程先锁定了第一个对象
  
  2 另一个线程执行完成 , 需要 先后 嵌套 锁定两个对象,在这个过程中,该线程先锁定了第二个对象
  
  3 第一个线程执行中,执行到锁第二个对象的时候,发现第二个对象被第二个线程锁住了,只能等待
  
  4第二个线程执行中,执行到锁第一个对象的时候,发现第一个对象被第一个线程锁住了,只能等待

 1.13.2 编码

 

1.14 线程通信 

1.14.1 概述

1.14.2 生产者和消费者

 

★简介

   生产者消费者模式并不是GOF提出的23种设计模式之一,23种设计模式都是建立在面向对象的基础之上的,但其实面向过程的编程中也有很多高效的编程模式,生产者消费者模式便是其中之一,它是我们编程过程中最常用的一种设计模式。

   在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。

    单单抽象出生产者和消费者,还够不上是生产者/消费者模式。该模式还需要有一个缓冲区处于生产者和消费者之间,作为一个中介。生产者把数据放入缓冲区,而消费者从缓冲区取出数据。大概的结构如下图。

为了不至于太抽象,我们举一个寄信的例子(虽说这年头寄信已经不时兴,但这个例子还是比较贴切的)。假设你要寄一封平信,大致过程如下:

    1、你把信写好——相当于生产者制造数据

    2、你把信放入邮筒——相当于生产者把数据放入缓冲区

    3、邮递员把信从邮筒取出——相当于消费者把数据取出缓冲区

    4、邮递员把信拿去邮局做相应的处理——相当于消费者处理数据

    ★优点

   可能有同学会问了:这个缓冲区有什么用捏?为什么不让生产者直接调用消费者的某个函数,直接把数据传递过去?搞出这么一个缓冲区作甚?

    其实这里面是大有讲究的,大概有如下一些好处。

   ◇解耦

    假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法,那么生产者对于消费者就会产生依赖(也就是耦合)。将来如果消费者的代码发生变化,可能会影响到生产者。而如果两者都依赖于某个缓冲区,两者之间不直接依赖,耦合也就相应降低了。

    接着上述的例子,如果不使用邮筒(也就是缓冲区),你必须得把信直接交给邮递员。有同学会说,直接给邮递员不是挺简单的嘛?其实不简单,你必须得认识谁是邮递员,才能把信给他(光凭身上穿的制服,万一有人假冒,就惨了)。这就产生和你和邮递员之间的依赖(相当于生产者和消费者的强耦合)。万一哪天邮递员换人了,你还要重新认识一下(相当于消费者变化导致修改生产者代码)。而邮筒相对来说比较固定,你依赖它的成本就比较低(相当于和缓冲区之间的弱耦合)。

或者比如我们现在取快递或者取外面,一般我们上课或者上班 ,不方便拿快递,所以 只需要把快递放到相应的投放点即可,比如菜鸟驿站,此时 菜鸟驿站就是这个缓冲区,而我们和快递员之间的耦合度就降低了,相互之间也不用认识

1.15 单例模式

1.15.1 概述

让某个类只实例化一次对象

1 构造方法私有化

2 静态变量保存创建的对象

3 公共的静态方法,用于获取当前类对象

1.15.2 之前编码

1.15.3 问题和解决 

可以使用synchronized解决

可以解决,但是效率低,因为我们只需要在第一次创建对象的时候,排序执行即可,

一旦对象创建完成,后续就算有多个线程同时进入判断,都为false

所以此时我们应该优先考虑代码块锁而不是方法锁

 

 

 

 

 

 

 

 

 

 

 

 

从Oracle到腾讯TDSQL数据库升级技术分享 腾讯TDSQL(Tencent Distributed SQL)是一款兼具关系数据库和NoSQL数据库优点的新型数据库,文章主要分享oracle升级为TDSQl数据库技术经验。 阅读详情

相关推荐

基于价值的深度强化学习:DQN

本文主要是介绍DQN原理和算法伪代码和代码实现,算法实现包括pytorch版本和stable-baselines3版本

溯源的专栏 1085

day24_多线程

24.01_多线程(多线程的引入)(了解) 1.什么是线程 线程是程序执行的一条路径, 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率, 可以同时完成多项工作 2.多线程的应用场景 红蜘蛛同时共享屏幕给多个电脑 迅雷开启多条线程一起下载 QQ同时和多个人一起视频 服务器同时处理多个客户端请求 24.02_多线程(多线程并行和并发的区别)(了解) 并行就是两个任务同时运行,就是甲任务

what 231

某手sig3-ios算法 Chomper黑盒调用

本文主要是介绍Chomper的算法模拟执行,Chomper目前已经已经是能比较完整的模拟ios可执行文件执行的模拟器,在这块有非常大的优势。以前安卓端有强势的unidbg,现在iOS也有Chomper了,后续等待作者持续更新,完善Chomper。强势推荐一波-> Chomper地址: https://github.com/sledgeh4w/chomper。我这块也已经使用Chomper完成雅迪系列、某手的算法调用。后续也会有更多扩展。

成小新的博客 2156

Day24 Java 多线程

多线程概述 进程: 正在运行的程序,是系统进行资源分配和调用的独立单位。 每一个进程都有它自己的内存空间和系统资源。 线程: 是进程中的单个顺序控制流,是一条执行路径。一个进程如果只有一条执行路径,则称为单线程程序。一个进程如果有多条执行路径,则称为多线程程序。 线程包含在进程中 三个关键词: 1、串行 指的是一个程序中所有的任务都是按照先后顺序执行的,在前一个任务还没有处理完的情况下,是不会进行处理下一个任务的 2、并行 指的是将任务分给不同的处理器去处理,每一个处理器中再进行串行处理。

m0_64350718的博客 258

cosmos-curate工业级视频数据预处理引擎/终端用户指南( end-user-guide)

摘要:Cosmos-Curate是一个用于视频和自动驾驶数据处理的开源工具,提供从本地到集群的完整部署方案。文档针对三类用户:终端用户(配置运行现有管道)、开发者(修改/创建管道)和贡献者(改进代码库)。核心功能包括容器化设计(Docker+NVIDIA工具链)、多平台支持(本地/Slurm/云)、集成HuggingFace/NGC模型,以及可扩展的管道架构。使用需满足硬件(如Ampere架构GPU)和软件(Ubuntu22.04+Python3.10)要求,通过CLI工具构建镜像、下载模型并运行示例管道(

qq_45053161的博客 1202

edusrc挖掘思路

edusrc挖掘思路前言思路信息搜集系统账号常见漏洞实战分享1、确定目标,语法:site:xxxx.edu.cn2、账号密码组成我们知道了,谷歌语法查找工号3、爆破登录系统4、确定功能,抓具体的url5、添加单引号,报错,是mssql6、报数据库版本,到这一步就可以交了,已经是中危了后记 前言 一月份的时候偶然注意到edusrc,起初是抱着学习的心态去挖几个洞,可是后面发现有证书,而且还贼好看,于是我动了凡心,一顿操作也拿了几本,广西民大、山东理工、同济,未到的有浙大、上海理工,证书要求证书图片可以在我个人

qq_45414878的博客 2万+

day24(多线程)

1.多线程的引入 什么是线程 * 线程是程序执行的一条路径, 一个进程中可以包含多条线程 * 多线程并发执行可以提高程序的效率, 可以同时完成多项工作多线程的应用场景 * 红蜘蛛同时共享屏幕给多个电脑 * 迅雷开启多条线程一起下载 * QQ同时和多个人一起视频 * 服务器同时处理多个客户端请求2.多线程并行和并发的区别 并行就是两个任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU

tangou2433的博客 330

【系统架构设计师】预测试卷一:综合知识(75道选择题)

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式,架构风格反映领域中众多系统所共有的结构和 (48),强调对架构(49)的重用。 (48) A. 语义特性 B. 功能需求 C. 质量属性 D. 业务规则 (49) A. 分析 B. 设计 C.实现

数据知道的博客 7766

day24 多线程

1. 常用方法 Start(): 启动线程的唯一方式。 setName(): 设置线程的名字 getName(): 获取线程的名字 setPriority(): 设置线程优先级 getPriority(): 获取线程优先级 static currentThread(): 获取当前线程的内存地址 static sleep(): 睡眠当前线程,参数是睡眠的毫秒数。 public class Test{ public static void ...

wzhty125的博客 102

基于matlab的阈值分割的车牌定位识别系统

车牌自动识别模块是现代社会智能交通系统(ITS)的重要组成部分,是图像处理和模式识别技术研究的热点,具有非常广泛的应用。车牌识别主要包括以下三个主要步骤:车牌区域定位、车牌字符分割、车牌字符识别。本案例通过对采集的车牌图像进行灰度变换、边缘检测、腐蚀及平滑等过程进行车牌图像预处理,并由此得到一种基于车牌颜色纹理特征的车牌定位方法,最终实现了车牌区域定位。车牌字符分割是为了方便后续对车牌字符进行匹配,从而对车牌进行识别。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 969

Google Cameraserver 看门狗CameraServiceWatchdog超时crash原理分析

本文分析了Android CameraServiceWatchdog机制的工作原理。该看门狗用于监控相机服务关键操作(如close、flush)的超时情况,通过定时器线程检测阻塞问题。文章详细讲解了Watchdog的初始化流程、使能方式、内部定时器机制(默认周期100ms,650次循环触发超时),并提供了configureStreams阶段的客制化实现方案。当检测到超时,Watchdog会触发abort生成tombstone日志,便于调试分析。

1130

day24<多线程>

多线程(多线程的引入) 多线程(多线程并行和并发的区别) 多线程(Java程序运行原理和JVM的启动是多线程的吗) 多线程(多线程程序实现的方式1) 多线程(多线程程序实现的方式2) 多线程(实现Runnable的原理) 多线程(两种方式的区别) 多线程(匿名内部类实现线程的两种方式) 多线程(获取名字和设置名字) 多线程(获取当前线程的对象) 多线程(休眠线程) 多线程(守护线程) 多线程(加入

:)一位靓仔偶然路过的博客 2523

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

day24(多线程(上))

###24.01_多线程(多线程的引入)(了解) 1.什么是线程 线程是程序执行的一条路径, 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率, 可以同时完成多项工作 2.多线程的应用场景 红蜘蛛同时共享屏幕给多个电脑 迅雷开启多条线程一起下载 QQ同时和多个人一起视频 服务器同时处理多个客户端请求 ###24.02_多线程(多线程并行和并发的区别)(了解) 并行就是...

qq_37253085的博客 175

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

day24 多线程 设计模式

------------------------------------day24 总结------------------------------------ 1:多线程(理解) (1)JDK5以后的针对线程的锁定操作和释放操作 Lock锁 (2)死锁问题的描述和代码体现 (3)生产者和消费者多线程体现(线程间通信问题) 以学生作为资源来实现的 资源类:Student 设置数据类:SetT...

baidu_38717388的博客 190

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Day24 --多线程(上)

a.     线程         概述             * 线程是程序执行的一条路径,一个进程中可以包含多条线程             * 多线程并发执行可以提高程序执行效率,同时可以完成多项工作             * 每一个程序的运行,就可以看做是一个个进程,进程中包含多条线程                 * 例如:360软件,同时杀毒,同时清理垃圾,同时优化系

zhangjian_GitHub的博客 337

Day_24 多线程

一、线程控制 join:合并线程,多个线程合并为一个线程 public class Thread_01_Join { public static void main(String[] args) { Thread t1 = new Thread(new Processer_01()); Thread t2 = new Thread(new Processer_01()); t1.setName("t1"); t2.setName("t2"); t1.start();.

qq_26942049的博客 134

day 24 多线程

1.join 合并线程,多个线程合并为一个线程 public static void main(String[] args) { Thread t1 = new Thread(new Processer_01()); Thread t2 = new Thread(new Processer_01()); t1.setName("t1"); t2.setName("t2"); t1.start(); t2.start(); try { // 执行到join的

day——01 74

java day24 多线程(上)

24.01_多线程(多线程的引入)(了解) 1.什么是线程 线程是程序执行的一条路径, 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率, 可以同时完成多项工作 2.多线程的应用场景 红蜘蛛同时共享屏幕给多个电脑 迅雷开启多条线程一起下载 QQ同时和多个人一起视频 服务器同时处理多个客户端请求 3.原理 CPU切换很快,表面上看是同时执行,底层只是在不断分配时间,一次只...

我是要成为海贼王的男人! 192

JavaSE学习day24(多线程(上))

###24.01_多线程(多线程的引入)(了解) 1.什么是线程 线程是程序执行的一条路径, 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率, 可以同时完成多项工作 2.多线程的应用场景 红蜘蛛同时共享屏幕给多个电脑 迅雷开启多条线程一起下载 QQ同时和多个人一起视频 服务器同时处理多个客户端请求 ###24.02_多线程(多线程并行和并发的区别) 并行就是...

weixin_42135811的博客 290

DAY24 多线程数据安全问题

多线程数据安全问题 产生条件 多线程运行环境(无法打破) 多线程共享数据(无法打破) 对共享操作的非原子操作(打破,将其变为原子操作,即加锁) 原子操作:一种操作,要么不执行,要么一次执行完 JAVA语言如何实现加锁 同步代码块 synchronized(锁对象){ 对多线程原子变量的一组操作 } synchronized代码块中的锁对象,可以是JAVA语言中的任意对象,因为JAVA中所...

weixin_43798860的博客 192

Day24Java基础学习(多线程)

Day24 多线程 (1) 什么时线程 线程时程序执行的一条路径,一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率,可以同时完成多项工作。 (2) 多线程的应用场景 (1) 红蜘蛛同时共享屏幕给多个电脑 (2) 迅雷开启多线程一起下载 (3) QQ同时和多个人一起视频 (4) 服务器同时处理多个客户端的请求 多线程(多线程并行和并发的区别) (1) 并行就是两个任务同时运行,就...

weixin_44400192的博客 173

day24_多线程进阶

java多线程进阶,死锁,线程通信,线程池

沐沐 582

Java学习Day24:基础篇14:多线程

生、存在和消亡的过程。配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。

weixin_51721783的博客 916

阶段01Java基础day24多线程+GUI

25.01_多线程(多线程方法) 1.yield让出cpu 2.setPriority()设置线程的优先级 25.02_多线程(单例设计模式)(掌握) 单例设计模式:保证类在内存中只有一个对象。 如何保证类在内存中只有一个对象呢? (1)控制类的创建,不让其他类来创建本类的对象。private (2)在本类中定义一个本类的对象。Singleton...

dhsdh56756的专栏 111
上一篇: Day23 多线程
下一篇: Day25 网络编程、正则表达式
java_yangXL
博客等级 码龄5年 1粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值