请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如何缩小同步的范围

老师,我在模拟并发写文件(即传一个日期,把当天的数据生成到以日期命令的文件里) 时有一个问题,代码如下

@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方法,针对这种情况,我应该如何写同步逻辑,确保只针对同一天的请求才需要加锁等待

正在回答 回答被采纳积分+3

1回答

Jimin 2018-08-02 00:58:34
你好,你这个不加synchronized貌似也不会有线程安全问题吧,你现在date变量是每次传入方法来的,属于堆栈封闭,如果date是static修饰的全局变量,才需要synchronized。这个方法是没问题的,你只需要保证传入的date是正确的就ok的,多个线程间不存在共享的变量。
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号