接上一个问题(http://coding.imooc.com/learn/questiondetail/71817.html), 我的测试代码及现象如下:
public static void main(String[] args) {
ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("doing-%d").build();
ThreadPoolExecutor executor = new ThreadPoolExecutor(100, 100, 0L, TimeUnit.MINUTES,
new LinkedBlockingQueue<Runnable>(1), threadFactory, new ThreadPoolExecutor.AbortPolicy());
final FileService fileService = new FileService();
for (int i = 0; i < 100; i++) {
executor.execute(new Runnable() {
@Override
public void run() {
fileService.write("20180802");
}
});
}
executor.shutdown();
}
public static class FileService {
private static final String TEST_DIR = "/test4mut";
private static final String FLAG = "/_DOING";
public void write(String date){
if(check(date)){
System.out.println(Thread.currentThread().getName() + " doing....");
}else{
//System.out.println("---------");
}
}
public boolean check(String date){
String dir = TEST_DIR+date;
File flag = new File(dir+FLAG);
if(flag.exists()){
return false;
}else{
try {
flag.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
} 运行结果:
doing-0 doing.... doing-1 doing....
想问下老师,我上面那个同步应该怎么编写