当前位置:网站首页>线程同步、生命周期
线程同步、生命周期
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
边栏推荐
- Logical volume creation and expansion
- Master in minutes --- ternary operator (ternary operator)
- Some little records~
- 阿里研发三面,面试官一套组合拳让我当场懵逼
- 51 MCU + LCD12864 LCD Tetris game, proteus simulation, ad schematic diagram, code, thesis, etc
- MCU function signal generator, output four kinds of waveforms, adjustable frequency, schematic diagram, simulation and C program
- 流程控制之分支语句
- Electronic perpetual calendar of DS1302_ 51 single chip microcomputer, month, day, week, hour, minute and second, lunar calendar and temperature, with alarm clock and complete set of data
- C语言知识点精细详解——数据类型和变量【2】——整型变量与常量【1】
- JumpServer
猜你喜欢
随机推荐
C语言知识点精细详解——初识C语言【1】
一些小小小小记录~
LLVM - 生成for循环
基于单片机的DS18B20的数字温度监控报警系统设计【LCD1602显示+Proteus仿真+C程序+论文+按键设置等】
TLC5615 based multi-channel adjustable CNC DC regulated power supply, 51 single chip microcomputer, including proteus simulation and C code
51 MCU + LCD12864 LCD Tetris game, proteus simulation, ad schematic diagram, code, thesis, etc
本以为能躺着进华为,结果陆续收到京东/滴滴/爱奇艺offer的我迷茫了
8.2 文本预处理
直流可调稳压电源的Proteus仿真设计(附仿真+论文等资料)
LM317的直流可调稳压电源Multisim仿真设计(附仿真+论文+参考资料)
redis 模块编程中 key value的生命周期
【Servlet】Servlet 详解(使用+原理)
金九银十,入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)
Redis cluster 原理
Electronic perpetual calendar of DS1302_ 51 single chip microcomputer, month, day, week, hour, minute and second, lunar calendar and temperature, with alarm clock and complete set of data
DVWA之暴力破解(Brute Force)Low-->high
LotusDB 设计与实现—1 基本概念
8.3 语言模型与数据集
机器学习之逻辑回归(Logistic Regression)原理讲解和实例应用,果断收藏
初识STL









