java 线程池执行任务,包含失败重试和任务日志
时间: 2023-06-28 11:05:59 浏览: 124
可以使用Java的Executor框架来实现线程池执行任务,同时结合日志框架和重试机制来实现任务失败重试和任务日志。以下是一个简单的示例:
```java
import java.util.concurrent.*;
public class TaskExecutor {
private static final int MAX_THREADS = 10;
private static final int MAX_RETRY_COUNT = 3;
private static final int RETRY_DELAY_SECONDS = 5;
private ExecutorService executor;
public TaskExecutor() {
executor = Executors.newFixedThreadPool(MAX_THREADS);
}
public void execute(Runnable task) {
executor.execute(() -> {
int retryCount = 0;
boolean success = false;
while (!success && retryCount < MAX_RETRY_COUNT) {
try {
task.run();
success = true;
} catch (Exception e) {
retryCount++;
System.out.println("Task execution failed, retrying in " + RETRY_DELAY_SECONDS + " seconds...");
try {
Thread.sleep(RETRY_DELAY_SECONDS * 1000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
if (!success) {
System.out.println("Task execution failed after " + MAX_RETRY_COUNT + " retries.");
}
// Log task execution result
if (success) {
System.out.println("Task executed successfully.");
} else {
System.out.println("Task execution failed.");
}
});
}
public void shutdown() {
executor.shutdown();
}
}
```
在这个示例中,我们创建了一个名为TaskExecutor的类,它使用Java的Executor框架来实现线程池执行任务。execute()方法接受一个Runnable对象,该对象实现了要执行的任务逻辑。在任务执行期间,我们使用一个while循环来实现失败重试,最多重试MAX_RETRY_COUNT次。如果任务成功执行,则输出"Task executed successfully.",否则输出"Task execution failed."。在任务执行期间,我们使用System.out.println()语句来输出任务执行日志。当然,你可以使用更高级的日志框架来记录任务日志。
最后,我们在TaskExecutor类中实现了一个shutdown()方法,该方法用于关闭线程池。