线程同步的场景

来源:互联网 发布:linux 修改密码 eof 编辑:程序博客网 时间:2024/05/16 00:26
主要是限制两个分别位于不同线程的方法,必须不能同时执行,这样避免了脏数据。

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

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