线程同步的场景

主要是限制两个分别位于不同线程的方法,必须不能同时执行,这样避免了脏数据。

一种思路是,锁住多个方法,比如读和写的方法都加上对象锁,这样就保证了通过同一个对象来调用读和写方法的两个线程中,读和写不能同时进行。
代码设计如下:
假设写方法耗时5s,用sleep来模拟。读方法几乎不耗时。
当程序中的线程A(AThread)开始写的时候,线程B(BThread)此时需要读数据(模拟的时候可以让主线程启动A后sleep1s再启动B)。如果不采取同步策略,由于线程A此时还没有写好数据,则线程B读到的数据就是还没写好的。

另一种思路是,只锁一个方法,不希望该方法在不同的线程中同时调用,比如单例模式的情况,如果有一个线程正在创建这个实例,则希望其他线程中调用创建实例的方法不要执行。
代码设计如下:
假设创建一个实例耗时5s,用sleep来模拟。
线程A在创建实例时,先判断该实例是否存在,如果存在,则不创建,不存在,就开始创建。如果不采取同步策略,则线程A在创建时,线程B也进入到创建的方法(模拟的时候可以让主线程启动A后sleep1s再启动B),则由于线程A尚未创建好实例,此时线程B也会执行创建实例,最终就会产生两个实例。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值