在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
同步代码块如何解决数据安全问题?同步中的线程,没有执行完毕不会释放锁,同步外的线程没有锁进不去;同步保证了只能有一个 线程在同步中执行共享数据,保证了安全;程序频繁的判断锁,获取锁,释放锁,程序的效率会降低。
一、同步代码块
synchronized关键字可以用于方法中的某个区块中,表示只对这个区块这个区块的资源实现互斥访问
卖票案例出现了线程安全问题
卖出了不存在的票和重复的票
解决线程安全问题的一种方案:使用同步代码块
格式:
synchronized(同步锁){
需要同步操作的代码
}
注意事项:
1.通过代码块中的锁对象,可以使用任意的对象
2.但是必须保证多个线程使用的锁对象是同一个
3.锁对象作用:把同步代码块锁住,只让一个线程在同步代码块中执行

测试类:

二、同步技术的原理
使用了一个锁对象,这个锁对象叫同步锁,也叫对象锁,也叫对象监视器
3个线程一起抢夺cpu的执行权,谁抢到了谁执行run方法进行卖票
t0抢到了cpu的执行权,执行run方法,遇到synchronized代码块
这时t0会检查synchronized代码块是否有锁对象
发现有,就会获取到锁对象,进入到同步中执行
t1抢到了cpu的执行权,执行run方法,遇到synchronized代码块
这时t1会检查synchronized代码块是否有锁对象
发现没有,t1就进入到阻塞状态,会一直等待t0线程归还锁对象
一直到t0线程执行完同步中的代码,会把锁对象归还给同步代码块
t1才能获取到锁对象进入到同步中执行
出现线程安全问题,会出现不存在的数据以及重复的数据,解决线程安全问题的其中一种方案使用同步代码块。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
String s = "Hello";s = s + " world!"码执行变化
String s = "Hello";s = s + " world!";这两行代码执行后原始的 String 对象中的内容变了吗? 没有。因为 String 被设计成不可变(immutable)类,所以它所有对象都是不可变对象。在这段代码中,s 原先指向一个 String 对象,内容是 "Hello",然后我们对 s 进行了+操作。
9977
2019-05-24 16:23:20
Java基础面试题 Object类中Hashcode 和 equals区别与联系是什么?
equals Object 类中默认的实现方式是 : return this == obj 。那就是说,只有 this 和 obj 引用同一个对象,才会返回 true。Hashcode这个方法返回对象的散列码,返回值是 int 类型的散列码。
9486
2019-06-03 16:36:48
Java程序员面试题:类的加载过程是什么
未来给博学谷学员提供更多的就业辅导以及学习资料,小编整理了大量关于Java程序员面试的题目。及时你现在还没有换工作的打算,也可以通过面试题了解目前企业注重的内容从而查漏补缺,为未来“跳槽”做好准备。本期分享的Java程序员面试题是:类的加载过程。
7513
2019-06-19 17:53:33
Java技术分享:BPMN知识介绍
BPMN的主要目标是提供些被所有业务用户容易理解的符号,从创建流程轮廓的业务分析到这些流程的实现。知道最终用户的管理监控。简单来说就是BPMN定义了一个业务流程图。下面就具体为大家介绍一下BPMN的相关内容。
12718
2019-07-11 17:31:21
2019年Spring Boot面试题集合附答案
相信所有Java开发者都认同,在微服务中,Spring Boot是最好的Java框架。Spring Boot自身最大的优势就是简化配置,可以说它真正实现了自动化配置。因此大家要想做好Java开发,给大家的建议就是成为Spring Boot的高手。本文为大家整理了2019年最新的Spring Boot面试题和答案,如果大家能够好好做一做这份面试题集合,相信面试一定手到擒来。
7143
2019-12-20 18:05:36
