用户输入线程个数n,单个线程拷贝单个文件,最终拷贝n个文件 java 代码
时间: 2024-10-11 14:14:57 浏览: 18
cp.tar.gz_linux copyfile_拷贝文件
在Java中,你可以使用`ExecutorService`和`Callable`接口来实现这个场景。这里是一个简单的示例,假设`copyFile`方法用于复制一个文件:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FileCopier {
private static final int FILE_NUM = 10; // 假设有n个文件
public static void main(String[] args) {
int n = Integer.parseInt(args[0]); // 获取用户输入的线程数
ExecutorService executor = Executors.newFixedThreadPool(n);
for (int i = 0; i < FILE_NUM; i++) { // 遍历文件
Future<Void> future = executor.submit(new CopyTask(i)); // 提交任务到线程池
}
// 等待所有任务完成
executor.shutdown();
try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("所有文件复制完成");
}
static class CopyTask implements Callable<Void> {
private int fileId;
public CopyTask(int fileId) {
this.fileId = fileId;
}
@Override
public Void call() {
copySingleFile(fileId); // 调用实际的文件复制方法
return null;
}
private void copySingleFile(int id) {
// 这里只是一个占位符,你需要替换为实际的文件复制操作
System.out.println("开始复制文件 " + id);
// 实现文件复制...
System.out.println("文件 " + id + " 已经复制");
}
}
}
```
在这个例子中,用户输入的线程数会创建相应的固定大小线程池。每个`CopyTask`实例代表一个单独的任务,负责复制一个文件。当所有的文件都被提交给线程池后,主线程会等待所有任务完成。
阅读全文