java线程池周期定时发送任务,若任务发送成功,则关闭线程池,若1分钟后线程池未关闭,则关闭线程池完整代码
时间: 2024-09-11 18:13:19 浏览: 102
在Java中,可以使用`ScheduledExecutorService`来实现周期性定时发送任务,并在任务发送成功后关闭线程池。如果1分钟后线程池未关闭,则强制关闭。下面是一个简单的示例代码:
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池作为调度线程池
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
// 定义周期性任务
Runnable task = () -> {
System.out.println("任务执行时间:" + System.currentTimeMillis());
// 在这里添加你的任务代码
// ...
// 任务发送成功后的处理逻辑
try {
// 假设任务执行后,我们等待一段时间来确保任务发送成功
Thread.sleep(5000);
// 关闭线程池
scheduler.shutdown();
System.out.println("线程池已关闭");
} catch (InterruptedException e) {
e.printStackTrace();
}
};
// 定义调度任务
// 第二个参数为初始延迟时间,第三个参数为周期时间,第四个参数为时间单位
scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.MINUTES);
// 启动线程池后,主线程休眠2分钟,如果1分钟后任务发送成功线程池会关闭,否则等待2分钟后强制关闭
try {
Thread.sleep(2 * 60 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 如果线程池还未关闭,强制关闭
if (!scheduler.isTerminated()) {
scheduler.shutdownNow();
System.out.println("线程池强制关闭");
}
}
}
```
在这段代码中,我们首先创建了一个`ScheduledExecutorService`实例作为调度线程池,并定义了一个周期性任务。这个任务在执行后会等待5秒钟(模拟任务发送成功后的处理),然后关闭线程池。我们还设置了一个主线程的休眠时间,如果1分钟后任务发送成功,则主线程会等待任务执行完毕,然后关闭线程池。如果1分钟内任务未执行完毕,则在主线程休眠2分钟后强制关闭线程池。
请注意,实际使用中需要根据具体业务需求调整任务的执行逻辑和线程池的配置参数。
阅读全文