以下代码会定期执行文件传输任务。我想通过调用相同的方法从不同的位置同时做另一个文件复制任务。为此我创建了另一个runnable2和executor2实例并执行。如何使用单个实例执行多个任务,而不是创建多个实例。
public static void main(String[] args) {
Runnable runnable = new Runnable() {
public void run() {
File srcFolder = new File("c:\\location1\\Test1\\");
File destFolder = new File("d:\\location1\\Test1\\");
if(!srcFolder.exists()){
System.out.println("Directory does not exist.");
System.exit(0);
}else{
try{
copyFolder(srcFolder,destFolder);
}catch(IOException e){
e.printStackTrace();
System.exit(0);
}
}
System.out.println("Done");
}
};
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(runnable, 0, 300, TimeUnit.SECONDS);
}
答案 0 :(得分:0)
如果你要多次执行相同的操作,那么创建一个类比匿名类更好(使它在构造函数中有2个参数):
public class FileCopy implements Runnable {
private String src="", dest = "";
public FileCopy(String src, String dest){
this.src = src;
this.dest = dest;
}
@override
public void run(){
File srcFolder = new File(src);
File destFolder = new File(dest);
if(!srcFolder.exists()){
System.out.println("Directory does not exist.");
//System.exit(0);
}else{
try{
copyFolder(srcFolder,destFolder);
}catch(IOException e){
e.printStackTrace();
//System.exit(0);
}
}
System.out.println("Done");
}//run
}
现在您可以根据需要制作任意数量的实例,每次都传递不同的参数,然后执行 Runnable
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(new FileCopy(src1, dest1), 0, 300, TimeUnit.SECONDS);
executor.scheduleAtFixedRate(new FileCopy(src2, dest2), 0, 300, TimeUnit.SECONDS);
注意::
您可能需要将此newScheduledThreadPool(1)
更改为newScheduledThreadPool(2)
吗?不太确定
System.exit(0);
现在不是一个选项,如果出现错误,因为你有多个实例正在运行,如果有问题,这不应该意味着关闭整个应用程序,你需要实现另一种方式处理错误