我编写了这个程序来测试mkdir()
失败的场景。为什么会失败?
有时它工作正常,有时我得到:
无法创建 DIR :: myDir4 无法创建 DIR :: myDir4
最后我发现每个目录都被创建了......
在每次测试中,我都会删除所有创建的目录。
我尝试了这个,因为在我的项目中有 100 个线程试图测试和创建这样的目录......并且也以同样的方式失败......
public class DFS {
static long time1 = System.currentTimeMillis();
public static void main(String a[]) {
new Thread(new CreteDir()).start();
new Thread(new CreteDir()).start();
new Thread(new CreteDir()).start();
new Thread(new CreteDir()).start();
new Thread(new CreteDir()).start();
new Thread(new CreteDir()).start();
new Thread(new CreteDir()).start();
new Thread(new CreteDir()).start();
}
}
class CreteDir implements Runnable {
public void run() {
//Object obj = new Object();
synchronized (this) {
if(System.currentTimeMillis() - DFS.time1 > 10) {
try {
this.wait();
}
catch(InterruptedException ie) {
ie.printStackTrace();
}
}
File f1 = new File("myDir1");
File f2 = new File("myDir2");
File f3 = new File("myDir3");
File f4 = new File("myDir4");
File f5 = new File("myDir5");
if (!f1.exists()&&!f1.mkdir()) {
System.out.println("Cannot create DIR :: "+f1.getName());
}
if (!f2.exists()&&!f2.mkdir()) {
System.out.println("Cannot create DIR :: "+f2.getName());
}
if (!f3.exists()&&!f3.mkdir()) {
System.out.println("Cannot create DIR :: "+f3.getName());
}
if (!f4.exists()&&!f4.mkdir()) {
System.out.println("Cannot create DIR :: "+f4.getName());
}
if (!f5.exists()&&!f5.mkdir()) {
System.out.println("Cannot create DIR :: "+f5.getName());
}
this.notifyAll();
}
}
}