创建一个重写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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)