我想访问自定义线程池执行器中可运行对象内的数据。如果我尝试在执行之前/之后访问方法,我会收到类转换异常。我该如何解决这种情况。
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
这意味着您将不是 MyThread
或 MyThread
子类的 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/