当前位置:网站首页>线程同步、生命周期
线程同步、生命周期
2022-04-23 14:26:00 【clear0217】
线程同步
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。
- 线程同步的必要性
保证多线程安全访问竞争资源。
为了防止多个线程访问一个数据对象时,对数据造成的破坏。
- 线程同步原理
上例可以看到我们在实现线程同步的时候,使用了synchronized关键字。该关键字修饰在方法上相当于对该方法加了锁。一个线程访问方法的时候需要先获得锁,然后才能执行该方法。此时,如果其他线程来了,发现锁已经被占用,则在方法调用处等待,直到锁被释放,再去竞争锁。获得锁,则执行该方法,否则,继续等待。
线程锁
每个Java对象都有一个内置锁,有且只有一个。
当程序执行到非静态的synchronized同步方法时,(如果锁没被其他线程占用)自动获得该方法所属对象的锁。
不只是可以修饰在方法上同步方法,也可以对代码块加锁。
程序执行的时候,退出同步块或同步方法则释放锁。
【注意】
不必同步类中所有的方法,根据需要进行同步。
线程sleep睡眠时,它所持的锁不会释放。
线程可以获得多个锁。
同步损害并发性,应该尽可能缩小同步范围。
Lock
Lock和synchronized均是为了解决线程同步问题 ,Lock相对于synchronized的功能更多、使用更灵活、更面向对象。
【使用】
private Lock lock = new ReentrantLock();
public void take(){
lock.lock();
//同步部分
lock.unlock();
}
线程的生命周期存在五个状态:新建、就绪、运行、阻塞、死亡
新建:采用new语句创建完成
就绪:执行start后
运行:占用CPU时间
阻塞:执行了wait语句、执行了sleep语句和等待某个对象锁,等待输入的场合
终止:执行完run()方法

进程与线程的区别
进程有独立的代码和数据空间,进程间切换成本开销大。
同一进程的多个线程间共享进程代码和数据空间,仅保留独立的线程栈、程序计数器,切换成本小。
多进程是操作系统中可见的并行运行的多个独立任务。
多线程是同一进程内不同的多个并行执行程序。
版权声明
本文为[clear0217]所创,转载请带上原文链接,感谢
https://blog.csdn.net/clear_0217/article/details/122855375
边栏推荐
- 顺序表的操作,你真的学会了吗?
- API Gateway/API 网关(二) - Kong的使用 - 负载均衡Loadbalance
- Detailed explanation of C language knowledge points -- first knowledge of C language [1]
- ssh限制登录的四种手段
- C语言p2选择分支语句详解
- 编译Openssl
- 555 timer + 74 series chip to build eight way responder, 30s countdown, proteus simulation, etc
- 51单片机+LCD12864液晶显示的俄罗斯方块游戏,Proteus仿真、AD原理图、代码、论文等
- Matrix exchange row and column
- Design of single chip microcomputer Proteus for temperature and humidity monitoring and alarm system of SHT11 sensor (with simulation + paper + program, etc.)
猜你喜欢

Qt界面优化:Qt去边框与窗体圆角化

机器学习之逻辑回归(Logistic Regression)原理讲解和实例应用,果断收藏

流程控制之分支语句

Detailed explanation of SAR command

基于单片机的DS18B20的数字温度监控报警系统设计【LCD1602显示+Proteus仿真+C程序+论文+按键设置等】

TLS/SSL 协议详解 (28) TLS 1.0、TLS 1.1、TLS 1.2之间的区别

C语言知识点精细详解——初识C语言【1】——你不能不知的VS2022调试技巧及代码实操【2】

MCU function signal generator, output four kinds of waveforms, adjustable frequency, schematic diagram, simulation and C program

想要成为架构师?夯实基础最重要

555 timer + 74 series chip to build eight way responder, 30s countdown, proteus simulation, etc
随机推荐
LLVM - 生成局部变量
Debug on TV screen
顺序表的操作,你真的学会了吗?
L'externalisation a duré quatre ans.
SHT11传感器的温度湿度监控报警系统单片机Proteus设计(附仿真+论文+程序等)
直流可调稳压电源的Proteus仿真设计(附仿真+论文等资料)
循环队列的基本操作(实验)
Tongxin UOS php7 2.3 upgrade to php7.0 two point two four
外包干了四年,废了...
8.2 文本预处理
On the insecurity of using scanf in VS
全连接层的作用是什么?
Find daffodils - for loop practice
如何5分钟上手使用OCR
Branch statement of process control
tcp_diag 内核相关实现 1 调用层次
JS progress bar, displaying the loading progress
MQ-2和DS18B20的火灾温度-烟雾报警系统设计,51单片机,附仿真、C代码、原理图和PCB等
查找水仙花数-for循环实践
OpenSSH的升级、版本号的修改