Ale*_*lls 5 java multithreading executorservice threadpool
说我有这个:
class Queue {
private static ExecutorService executor = Executors.newFixedThreadPool(1);
public void use(Runnable r){
Queue.executor.execute(r);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 如何定义池中使用的线程,特别是想要覆盖池中线程的中断方法:
@Override
public void interrupt() {
synchronized(x){
isInterrupted = true;
super.interrupt();
}
}
Run Code Online (Sandbox Code Playgroud)
通过指定a来定义如何创建池的线程ThreadFactory.
Executors.newFixedThreadPool(1, new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(r) {
@Override
public void interrupt() {
// do what you need
}
};
}
});
Run Code Online (Sandbox Code Playgroud)
当然,a ThreadFactory可以用lambda表示.
ThreadFactory factory = (Runnable r) -> new YourThreadClass(r);
Run Code Online (Sandbox Code Playgroud)
如果线程不需要额外的设置(比如使它成为守护进程),则可以使用方法引用.但是构造函数YourThreadClass(Runnable)应该存在.
ThreadFactory factory = YourThreadClass::new;
Run Code Online (Sandbox Code Playgroud)
我建议阅读的文档ThreadPoolExecutor和Executors.它们非常有用.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |