如何缩小同步的范围
来源:9-3 Spring与线程安全
![](http://img1.sycdn.imooc.com/user/53d3bae50001e73601000100-100-100.jpg)
目科将
2018-08-01
老师,我在模拟并发写文件(即传一个日期,把当天的数据生成到以日期命令的文件里) 时有一个问题,代码如下
@Servcie public class WriteFileServiceImpl { private static final String ROOT_PATH = ""; //标识正在处理当前文件 private static final String FLAG = "_DOING"; public boolean write(File file,Localdate date){ if(check(date)){ return false; } // eg. write file with data for date return true; } //加锁是担心在 标识文件 没有生成之前 有多个处理 同一天的请求 进入该方法 private synchronized boolean check(Localdate date){ if(new File(rootPath+"/"+date+"/"+FLAG).exists){ // create then flag file; return false; }elses{ return true; } } }
因为我没有配置scope,默认是单例的,这样就会有一个问题,若我处理不同天的请求,也会等待进入check方法,针对这种情况,我应该如何写同步逻辑,确保只针对同一天的请求才需要加锁等待
写回答
1回答
-
Jimin
2018-08-02
你好,你这个不加synchronized貌似也不会有线程安全问题吧,你现在date变量是每次传入方法来的,属于堆栈封闭,如果date是static修饰的全局变量,才需要synchronized。这个方法是没问题的,你只需要保证传入的date是正确的就ok的,多个线程间不存在共享的变量。00
相似问题