为我用java写一个线程池demo,要求设置线程执行超时时间为100秒
时间: 2024-05-09 15:21:07 浏览: 11
以下是一个简单的Java线程池示例,其中设置了线程执行超时时间为100秒:
```
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadPoolDemo {
public static void main(String[] args) {
// 创建一个线程池,最大并发数为10
ExecutorService executor = Executors.newFixedThreadPool(10);
// 提交任务到线程池
for (int i = 0; i < 20; i++) {
executor.submit(new Task(i));
}
// 关闭线程池
executor.shutdown();
try {
// 等待所有任务完成,最多等待100秒
if (!executor.awaitTermination(100, TimeUnit.SECONDS)) {
// 如果超时还有任务未完成,强制关闭线程池
executor.shutdownNow();
}
} catch (InterruptedException e) {
// 线程池被中断
e.printStackTrace();
}
}
private static class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
try {
// 模拟任务执行时间为10秒
Thread.sleep(10000);
System.out.println("Task " + taskId + " completed.");
} catch (InterruptedException e) {
// 任务被中断
System.out.println("Task " + taskId + " interrupted.");
}
}
}
}
```
在上面的示例中,我们首先创建一个固定大小为10的线程池,并将20个任务提交到线程池中执行。然后我们等待所有任务完成,最多等待100秒。如果超时还有任务未完成,我们将强制关闭线程池。在每个任务中,我们使用Thread.sleep(10000)来模拟任务执行时间为10秒。如果线程池中的线程执行任务的时间超过100秒,则任务将被中断。