java线程同步

线程同步

为什么要了解线程同步?
多个线程执行的不确定性引起执行结果的不稳定性
多个线程对账本的共享,会造成操作不完整性,会破坏数据
例如:两个人同时取银行卡的钱 需要保证事物的原子性
在这里插入图片描述
方式一:同步代码块
synchronized(同步监视器)

​ {
​ //需要被同步的代码
​ }
需要先解释两个概念
共享数据和同步监视器
共享数据:多个线程共同操作的变量,比如:ticket就是共享数据
​ 同步监视器:锁,任何一个类的对象 都可以称为锁
​ 要求:多个线程必须共用同一把锁
那么如何找到唯一的锁(即共享的对象)
那么就引申出继承Thread类和实现Runnable接口的区别
拿卖票举例
以下是Runnable接口的
在这里插入图片描述
继承Thread类的
在这里插入图片描述
由此可以得出 Runnable是多个线程共同完成一个任务
Thread是多个线程分别完成自己的任务
故此 我们在选择同步锁的时候 Runnable可以选this对象而继承Thread的不行
继而引出下一个问题,那么继承Thread的类有没有唯一对象可以用来当锁?答案是有的 可以用
MyThreadTickerSell.class (类名.class) 这个对象每次只会加载一次又或者我们可以自己创建一个静态对象来当锁 也是可以的

方式二:同步方法
如果操作共享数据的代码完整的声明在一个方法中,不妨将此方法声明同步
在这里插入图片描述
而继承Thread的不能直接加synchronized方法 得把该方法设置成静态方法
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值