java - 如何访问自定义线程池执行器方法中的线程对象?

标签 java multithreading executorservice threadpoolexecutor executors

我想访问自定义线程池执行器中可运行对象内的数据。如果我尝试在执行之前/之后访问方法,我会收到类转换异常。我该如何解决这种情况。

public class MyThread implements Runnable 
{
  String key;

  public void run(){ /* Do something */}  
}

public class MyExecutor extends ThreadPoolExecutor
{

  @Override
  protected void beforeExecute(Thread paramThread, Runnable paramRunnable)
  {
             MyThread mt = (mt)paramRunnable; 

  }

  @Override
  protected void afterExecute(Runnable paramRunnable, Throwable paramThrowable) 
 {
       MyThread mt = (mt)paramRunnable; 
    /* Need to access "key" inside MyThread */    
 }

最佳答案

如果得到 ClassCastException 这意味着您将不是 MyThreadMyThread 子类的 Thread 实现也传递到 MyExecutor 中。因此,为了修复它,您只需在转换之前执行 instanceof 检查。

public class MyExecutor extends ThreadPoolExecutor
{

  @Override
  protected void beforeExecute(Thread paramThread, Runnable paramRunnable)
  {
         if(paramRunnable instanceof MyThread) {
             MyThread mt = (MyThread)paramRunnable; 
         }

  }

  @Override
  protected void afterExecute(Runnable paramRunnable, Throwable paramThrowable) 
 {
       if(paramRunnable instanceof MyThread) {
           MyThread mt = (MyThread)paramRunnable; 
       }
       /* Need to access "key" inside MyThread */    
 }

关于java - 如何访问自定义线程池执行器方法中的线程对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29090229/

相关文章:

multithreading - 以 Node Js 方式创建工作队列的正确方法?

java - ExecutorService.newFixedThreadPool.submit(new class()) 会导致内存泄漏吗?

java - clojure 中的 Scala 类

multithreading - 线性系统求解器在 Julia 中是否也像在 Matlab 中一样是多线程的?以及如何在 Julia 中对其进行 "multithread"处理?

java - 从android执行shell命令

multithreading - 可以在一个GPU上并行运行多个 tensorflow 推论吗?

java - 使用 ExecutorService 对管道模式中的一个阶段进行多线程处理

java - 为什么我不应该将 PoolingHttpClientConnectionManager 与 FutureRequestExecutionService 一起使用?

java - 加载时显示 Java Swing 输入对话框

java - osgi 导出继承的实现