如何缩小同步的范围
来源:9-3 Spring与线程安全
目科将
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
相似问题