线程概念详解

操作系统中线程和进程的概念:
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。
      比如在Windows系统中,一个运行的exe就是一个进程。
      动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的
      并发性:任何进程都可以同其他进程一起并发执行
      独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位
      异步性:每个进程都以相互独、不可预知的速度向前推进 
      结构特征:进程由程序、数据和进程控制块三部分组成。
线程是指进程中的一个执行流程,一个进程中可以运行多个线程。
      比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。

 

线程的五种状态:
新生状态(New):当一个线程的实例被创建即使用new关键字和Thread类或其子类创建一个线程对象后,
                 此时该线程处于新生状态。 此时线程不是活着的(not alive);
就绪状态(Runnable):通过调用线程实例的start()方法来启动线程使线程进入就绪状态;
                      但还没有被分配到CPU,处于线程就绪队列;此时线程是活着的(alive);
运行状态(Running):一旦获取CPU,线程就进入运行状态,线程的run()方法才开始被执行;
                     如果在给定的时间内没有执行结束,就会被系统给换下来回到线程的就绪状态;
                     此时线程是活着的(alive);
阻塞状态(Blocked):通过调用join()、sleep()、wait()或者资源被暂用使线程处于阻塞状态;
                     此时线程是活着的(alive)
死亡状态(Dead):当一个线程的run()方法运行完毕或被中断或被异常退出,该线程到达死亡状态。

                  处于Dead状态调用start()方法,会出现异常

 

注:部分文档上会出现四种状态的说法,实际上是把“就绪状态”+“运行状态”=可执行状态

 
 
关于对象锁:
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁);
如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。 
取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,
其他在锁池中等待的某个线程就可以拿到锁执行了同步代码。这样就保证了同步代码在统一时刻只有一个线程在执行。
即:一个线程拿到了什么样的对象锁,就能打开什么样的synchronized,而同一对象锁只能在一个线程的手中

 

死锁:当两个线程相互等待对方释放“锁”时就会发生死锁。
如何避免死锁
1 使用事务时,尽量缩短事务的逻辑处理过程,及早提交或回滚事务;
2 设置死锁超时参数为合理范围,如:3分钟-10分种;超过时间,自动放弃本次操作,避免进程悬挂;
3 优化程序,检查并避免死锁现象出现;
4 .对所有的脚本和SP都要仔细测试,在正式版本之前。
5 所有的SP都要有错误处理(通过@error)
6 一般不要修改SQL SERVER事务的默认级别。不推荐强行加锁

 

可重入锁的概念是 自己可以再次获得自己的内部锁
重进入的实现是通过每个锁关联一个请求计数和一个占有它的线程,当计数为0时,认为锁是未被占有的,线程请时求一个未被占有的锁,
jvm将记录锁的占有者,并将请求计数置为一,如果同一个线程再次请求,计数器将递增,每次占用线程退出同步块计数器值将递减,
直到计数器为0,锁释放,如果内部锁不是可重入的,代码将死锁



转载于:https://www.cnblogs.com/zhujunxiao/p/5104128.html

cuda安装时出现错误 Unable to locate package cuda-toolkit-12-4 阅读详情

相关推荐

实战避坑:在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时,必须搞清的P2P DMA与IOMMU那些事

本文深入探讨在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时P2P DMA与IOMMU的关键问题,解析PCIe架构中的地址转换、P2P DMA与标准DMA的区别,以及IOMMU对性能的影响。通过实战案例和调优建议,帮助用户避免常见配置陷阱,提升AI训练集群的数据传输效率。

weixin_33720078的博客 444

Java线程概念详解

Java线程,Thread Callable Runnable 线程 synchronized ReentrantLock类加锁

weixin_75111785的博客 1089

别再傻傻分不清了!用Design Compiler和PrimeTime实操对比PBA与GBA模式

本文深度解析静态时序分析(STA)中Design Compiler与PrimeTime工具的PBA与GBA模式差异,通过实际案例演示两种模式在转换时间计算、时钟路径分析等方面的对比,并提供工程实践中模式选择的策略与调试技巧,帮助工程师在芯片设计流程中平衡精度与效率。

weixin_42552315的博客 415

线程池概念的详解

上一章我们介绍了什么是定时器以及如何去实现一个定时器,今天我们来讲解在多线程中同样很重要的一个内容线程池我们知道线程诞生的意义,是因为进程的创建和销毁的操作开销太大并且效率不高,但是呢如果频繁的创建和销毁线程,开销也不小下面使用两种办法,进一步提高线程效率简易解释:在应用程序启动时创建一定数量的线程,并将它们保存在线程池中。当需要执行任务时,从线程池中获取一个空闲的线程,将任务分配给该线程执行。当任务执行完毕后,线程将返回到线程池,可以被其他任务复用线程池可以看作是海王的鱼塘

N_0050的博客 1380

批处理脚本手动双击可以执行,但计划任务中执行失败

问题现象: 使用批处理脚本从linux端(samba server) 备份一些数据,设置计划任务每天凌晨两点定时备份。 1)、windows系统中映射共享文件夹为S:盘,需要输入共享用户名和密码 2)、脚本中使用xcopy命令复制共享目录中的文件到windows本地目录中。 脚本如下: set Name=%date:~0,4%%date:~5,2%%date:~8,2% chcp 65001 REM chcp防止中文乱码 mkdir "E:\脚本备份\bakscripts%Name%" xco

独孤清扬玩DB 4312

PySide6 vs PyQt6:新手如何根据Python版本选择GUI库?附版本兼容性测试

本文针对Python GUI开发新手,详细对比了PySide6与PyQt6的核心差异,并提供了基于Python 3.8至3.12等不同版本的兼容性实测数据与选择建议。文章重点分析了版本选择策略,帮助开发者根据自身Python环境、项目需求(如与matplotlib集成)及许可证考量,做出最合适的决策,并附有安装验证与避坑指南。

weixin_29094539的博客 703

Python线程全面详解:从基础概念到高级应用

A:Python中的Queue、deque(需加锁)、collections.defaultdict(需加锁)等,或使用threading.local实现线程局部存储。当我们将程序加载到内存中运行时,系统会为它分配CPU、内存、文件句柄等资源,这时就形成了一个进程。是CPU调度的基本单位,它是进程中的一个执行流。一个进程可以包含多个线程,这些线程共享进程的资源,但每个线程有自己的执行路径和栈空间。对于CPU密集型任务,由于GIL的存在,多线程可能不会提高性能,此时应考虑多进程。

q_cccc_的博客 1433

《Claude Code 实战》第 1 章:开启智能编程新纪元——初识 Claude Code

简单来说,Claude Code 是 Anthropic 公司推出的一款基于 Claude 3.7 Sonnet 等大语言模型的强大编程工具。但与传统的 ChatGPT 或普通的聊天机器人不同,Claude Code 具备了"动手"的能力。它不仅会"说",更会"做"。想象一下,你不再需要描述复杂的命令行参数,也不需要为了修改一个配置文件而频繁切换编辑器。Claude Code 可以直接读取你项目中的文件、理解复杂的代码库结构、执行终端命令,并直接为你生成或修改代码。

AI天才研究院 245

详解线程概念

什么是线程?我们认为,线程是操作系统调度的基本单位。重新理解进程?内核观点:进程是承担分配系统资源的基本实体。那么线程在操作系统中应该如何描述组织呢?大多数其他操作系统中有线程对应的调度,执行,描述,组织,但是Linux中是没有专门去对线程进行描述组织的,它复用了进程的数据结构和管理算法。Linux没有真正意义上的线程体现在其没有为线程专门用tcb描述组织起来,但是它符合操作系统对线程的定义。我们考虑一下,那CPU怎么区分线程和进程呢?对于CPU而言,我不关心是进程还是线程,只存在执行流的概念。

m0_74290369的博客 781

基于FPGA的UDP 通信(六)

本文基于FPGA和MATLAB对千兆以太网通信模块UDP数据发送(FPGA发送)进行联合调试。

记录所学,分享知识,结识挚友 4729

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1363

线程基本概念详解

本文只是粗略的讲解了一下有关线程的问题,讲的并不是非常的完全。还有很多可以写,但是万般头绪慢慢来,刚开始写只是列了一个大纲,然后越写越多,发现打不住头了,只写了一些线程的概念和实现的方法,线程的作用什么的。匿名内部线程什么的。写的时候在网上也找了部分自己感觉好的解释和例子。后面在开章写线程的同步,异步等问题。本文如果发现有问题,欢迎留言指正。感谢!   讲线程之前先讲一个进程的概念:进程(Pr...

这个屌人啥也没有… 2799

Labview如何0基础自学快速入门?(纯干货帖)

讲解了如何学习Labview,Labview如何0基础入门,自学Labview的方法。什么都不会如何学好Labview的分享,欢迎关注文章~文章提供《Labview宝典》pdf下载,和《Labview虚拟仪器数据采集与通信控制》pdf下载

关注我,更多技术问题欢迎私聊~ 2万+

1、【java线程及线程池系列】java线程及线程池概念详解

缓冲队列长度的设置,按照一般的理解应该设置成maximumPoolSize的5倍,因为单个线程在不切换cpu的情况下是单个cpu运算一个线程,corePoolSize设置成和cpu一样的数量,maximumPoolSize设置成cpu的2倍,避免cpu处于空闲状态则直接加入一旦cpu空闲理解执行的线程数量,同时由于cpu的速度较快以及有请求执行的线程加入缓冲队列中减少cpu等待时间,故将缓冲队列设置大一些。线程池存在的目的在于提前创建好需要的线程,减少临时创建线程带来的资源消耗。

alanchanchn的专栏 8万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Linux】线程详解之线程概念

经过前边的学习,我们知道进程拥有一个PCB,在Linux中被称为task_struct,并且有一个进程地址空间,也有一个页表,通过页表指向物理内存,但是从今天开始,对进程的概念可能发生变化,这个我们后边来说,在Linux中,并没有真正的线程,而是使用进程的PCB来模拟线程,也就是说一个线程在创建时,只会去创建一个PCB,而这个PCB也指向主线程的虚拟地址空间,和其他线程一起共享内存的代码和数据。一个线程也被称为一个执行流,这是因为线程是被CPU调度的执行流,而一个进程就是分配系统资源的基本实体。

weixin_61654591的博客 1214

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

进程、线程与多线程概念详解

一、概述 在windows中,每一个打开运行的应用程序或后台程序,比如运行中的QQ、谷歌浏览器、网易云音乐、资源管理器等都是一个进程。我们感觉这些程序是“同时”运行的,但实际上,一个处理器同一时刻只能运行一个进程,只是CPU在高速轮换执行让我们有这样的错觉,我们感受不到中断的原因是CPU执行速度相对于我们的感觉实在是太快了。我们学c,写java,大部分时候做的都是单线程的编程。只有一条顺序执行的主

Leeon的博客 8530

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

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

进程、线程以及上下文切换概念详解

上下文切换指的是在计算机中,当多个进程或线程共享同一个处理器时,需要在它们之间进行切换的过程。在一个时刻,CPU只能执行一个进程或线程的代码,当需要切换到另一个进程或线程时,需要保存当前进程或线程的执行状态,包括程序计数器、寄存器和内存指针等,然后将这些状态还原到另一个进程或线程中,使得它们能够接着之前的执行位置继续执行。这个过程就称为上下文切换。上下文切换通常发生在以下情况:// 上下文切换是由操作系统内核来执行的当一个进程或线程因为等待输入、输出、锁或其他原因被阻塞。

swadian2008的博客 3911

Linux:线程概念详解

本文深入解析了Linux系统中的线程概念及其实现机制。文章首先通过进程切换的开销问题引出线程的必要性,指出线程是比进程更轻量的执行流。核心观点包括:1)线程是操作系统调度的基本单位,而进程承担资源分配的角色;2)Linux采用复用PCB的独特设计实现线程,避免了TCB的冗余;3)线程必须在进程地址空间内运行,通过共享页表访问资源。作者以32位系统为例详细讲解了虚拟地址到物理地址的映射过程,解释了两级页表的设计优势。全文通过生活化类比和计算示例,生动展现了Linux线程设计的卓越智慧。

2402_87867439的博客 764

线程的概念和基本使用详解

线程:轻量级的进程 是进程内部的一条执行序列(一组有序指令),或者说是执行流。一个进程至少有一条线程,即就是main函数所代表的执行序列。称之为主线程。通过线程库可以创建线程——函数线程 主线程仅仅是代表进程执行的第一条线程而已,当主线程通过线程库创建出函数线程以后,两个线程就没有任何区别。 线程和进程的区别:1、进程是资源分配的单位 线程是CPU调度执行的单位 多进程:进程间资源都是独立的,同一进程中的多线程,资源是共享的。线程更加轻便,线程创建、调度、切换效率都比进程高。 线程库的使用 #includ

Serendipity_00的博客 2425

【Linux探索学习】第二十九弹——线程概念:Linux线程的基本概念与线程控制详解

【Linux探索学习】第二十九弹:线程的基本概念和线程控制的相关知识点,理清线程与进程的关系与区别!!

2301_80220607的博客 5572

[linux#39][线程] 详解线程的概念

探讨Linux中线程的概念,重新定义线程与进程,深入分析地址空间,并讨论线程的优点与缺点,最后通过小测试巩固理解。

No Game No Life 1319

进程与线程的概念详解

大家早上好,有段时间没更新文章了。 其实疫情期间在家呆了一个多月的时间不能出门,时间倒是挺多的,我也利用这段时间写了几篇新文章。但由于新写的这些文章大都是配合着新书中的内容的,受疫情的影响我写的新书迟迟不能出版,导致这些文章也无法发布,等得我好是焦急。希望疫情早日结束,大家都能快点恢复到正常的生活当中。 那么今天先发布一篇和Android无关的技术文章。 https这项技术现在已经应用得非常广泛了。随着苹果、Google等各大互联网领头企业纷纷在自己的操作系统、浏览器等主流产品中强制要求使用https,ht

mw_myever的博客 631

linux 线程_详解Linux线程概念、创建线程、停止线程

概述线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体;进程相当于运行中程序的一种抽象。根据运行环境的调度者的身份,线程可分为内核线程和用户线程。内核线程,在有的系统上称为LWP(Light Weight Process,轻量级线程),运行在内核空间,由内核调度;用户线程运行在用户空间,由线程库来调度。当进程的一个内核线程获得CPU的使用权时,它就加载并运行一个用户线程。可见,内核线程...

weixin_39645268的博客 104

【转载】进程、线程、多线程概念详解

进程、线程、多线程概念详解

Never Settle 285

进程、线程、多线程概念详解

序言   最近觉得自己对线程一块的理解非常混沌,于是回头将线程的知识从头开始梳理。   当前进的路上遇到瓶颈时,停下来整理回顾自己过去所做的,所学的,或许能够让你豁然开朗。   下面讨论的都是基于单核处理器。 进程是什么?   进程是程序运行实例,是程序向操作系统申请资源(例如内存空间)的基本单位。 打开Windows操作系统的任务管理器,点击进程菜单可以看到目前系统存在的所有进程。 ...

weixin_30367543的博客 122

线程概念详解(Thread)

线程和进程的区别: 一个进程内可以有多个线程,线程是比进程更小的单位 1、 进程是系统分配资源的基本单位,线程是CPU调度的基本单位,进程是程序的一次执行,线程是CPU调度的一次执行 2、进程之间是相互独立的,每个进程拥有自己的一块自身内存区域(进程间的通信是需要解决的问题),而多个线程之间是共享一块内存区域和一组资源的,有可能相互影响(因此会产生多个线程同时访问某一块数据的时候会导致数据不一致

请叫我王老魔 2121
上一篇: 跟我一起学extjs5(13--运行菜单命令在tabPanel中显示模块)
下一篇: 免费的就是最贵的
badiu_30394251
博客等级 码龄11年 124粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值