为我用java写一个线程池demo,要求设置每个线程每次执行时间不能超过100秒,不然抛出异常
时间: 2024-05-09 17:20:32 浏览: 98
以下是一个简单的线程池demo,其中每个线程的执行时间不能超过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) {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
Runnable task = new Task(i);
executor.execute(task);
}
executor.shutdown();
}
private static class Task implements Runnable {
private int taskId;
public Task(int id) {
this.taskId = id;
}
@Override
public void run() {
try {
System.out.println("Task " + taskId + " started.");
TimeUnit.SECONDS.sleep(5);
System.out.println("Task " + taskId + " completed.");
} catch (InterruptedException e) {
System.err.println("Task " + taskId + " interrupted.");
} catch (Exception e) {
System.err.println("Task " + taskId + " error: " + e.getMessage());
}
}
}
}
```
在上面的代码中,我们创建了一个固定大小为5的线程池,并提交了10个任务。每个任务是一个实现了Runnable接口的Task类的实例。在Task的run()方法中,我们模拟了一个耗时为5秒的操作,并在操作开始和结束时打印了一条日志。如果操作超时(超过100秒),则会抛出异常并打印出错信息。
当所有的任务都执行完成后,我们调用了ExecutorService的shutdown()方法来关闭线程池。这将等待所有任务执行完成后再关闭线程池。
阅读全文