ThreadPoolExecutor beforeExecute
时间: 2023-12-29 08:26:26 浏览: 143
Java进阶之ThreadPoolExecutor
ThreadPoolExecutor类中的beforeExecute方法是一个钩子方法,用于在线程执行任务之前执行一些操作。它可以被子类重写以提供自定义的行为。在beforeExecute方法中,可以执行一些准备工作,例如日志记录、资源分配等。
以下是一个示例代码,演示了如何重写ThreadPoolExecutor的beforeExecute方法:
```java
import java.util.concurrent.*;
public class MyThreadPoolExecutor extends ThreadPoolExecutor {
public MyThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
}
@Override
protected void beforeExecute(Thread t, Runnable r) {
// 在任务执行之前执行一些操作
System.out.println("Thread " + t.getName() + " is about to execute task " + r.toString());
}
// 其他自定义方法和重写的方法...
public static void main(String[] args) {
// 创建自定义的线程池
ThreadPoolExecutor executor = new MyThreadPoolExecutor(2, 4, 10, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
// 提交任务给线程池
for (int i = 0; i < 5; i++) {
executor.execute(() -> {
System.out.println("Task executed by " + Thread.currentThread().getName());
});
}
// 关闭线程池
executor.shutdown();
}
}
```
在上述示例中,我们创建了一个自定义的ThreadPoolExecutor类,并重写了beforeExecute方法。在该方法中,我们打印了线程的名称和即将执行的任务的信息。然后,我们使用自定义的线程池执行了5个任务,并最后关闭了线程池。
阅读全文