写一个 java线程池应用实例
时间: 2024-03-29 13:08:35 浏览: 68
当然,下面是一个简单的Java线程池应用实例,用于并发下载多个文件:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FileDownloader {
private ExecutorService executor;
public FileDownloader(int numThreads) {
executor = Executors.newFixedThreadPool(numThreads);
}
public void downloadFiles(String[] urls) {
for (String url : urls) {
executor.execute(new DownloadTask(url));
}
}
public void shutdown() {
executor.shutdown();
}
private class DownloadTask implements Runnable {
private String url;
public DownloadTask(String url) {
this.url = url;
}
@Override
public void run() {
System.out.println("Downloading file from " + url);
// 实际的下载逻辑
// ...
System.out.println("File downloaded from " + url);
}
}
public static void main(String[] args) {
String[] urls = { "http://example.com/file1.txt", "http://example.com/file2.txt", "http://example.com/file3.txt" };
FileDownloader downloader = new FileDownloader(5); // 使用5个线程下载文件
downloader.downloadFiles(urls);
downloader.shutdown();
}
}
```
在上述示例中,我们创建了一个FileDownloader类,它使用了Java线程池来并发下载多个文件。在构造方法中,我们通过`Executors.newFixedThreadPool(numThreads)`创建了一个固定大小的线程池,其中`numThreads`指定了线程池中线程的数量。
然后,我们定义了一个内部的DownloadTask类,实现了Runnable接口,用于表示下载任务。在downloadFiles方法中,我们遍历给定的URL数组,为每个URL创建一个DownloadTask对象,并通过`executor.execute()`方法提交给线程池执行。
在main方法中,我们创建了一个FileDownloader对象,并传入了需要下载的文件URL数组。然后调用downloadFiles方法执行下载任务,并在最后调用shutdown方法关闭线程池。
请注意,这只是一个简单的示例,实际的文件下载逻辑应该在DownloadTask的run方法中实现。
阅读全文