使用ThreadPoolExecutor,如何获取在线程池中运行的线程的名称?

使用ThreadPoolExecutor,如何获取在线程池中运行的线程的名称?,第1张

使用ThreadPoolExecutor,如何获取在线程池中运行的线程的名称

创建一个重写beforeExecute方法的ThreadPoolExecutor。

private final ThreadPoolExecutor executor = new ThreadPoolExecutor (new ThreadPoolExecutor(10, 10,  0L, TimeUnit.MILLISECONDS,  new linkedBlockingQueue<Runnable>()){       protected void beforeExecute(Thread t, Runnable r) {          t.setName(deriveRunnableName(r));    }    protected void afterExecute(Runnable r, Throwable t) {          Thread.currentThread().setName("");    }    protected <V> RunnableFuture<V> newTaskFor(final Runnable runnable, V v) {         return new FutureTask<V>(runnable, v) {  public String toString() {     return runnable.toString();  }         };     };}

不确定会如何

derveRunnableName()
运作,也许
toString()

编辑:Thread.currentThread()实际上是在调用afterExecute的beforeExecute中设置的线程。您可以引用Thread.currentThread(),然后在afterExecute中设置名称。这在javadocs中有所说明

protected void afterExecute(Runnable r, Throwable t) { }

编辑
TPE会将Runnable封装在FutureTask中,因此要支持该

toString
方法,您可以重写
newTaskFor
并创建自己的封装的FutureTask。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5490041.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存