Как мне получить доступ к членам класса в хуках beforeExecute и afterExecute в ThreadPoolExecutor?

1

Я расширяю класс ThreadPoolExecutor. Внутри этого я хочу установить значение члена в beforeExecute (Thread t, Runnable r) и afterExecute (Runnable r, Throwable t). Я не знаю, как это сделать. Может ли кто-нибудь помочь мне в этом?

Теги:
multithreading
runnable
threadpoolexecutor

1 ответ

1
Лучший ответ

Предположительно, вы хотите получить доступ к полю экземпляра экземпляров Runnable. Чтобы получить к ним доступ, вам необходимо сбрасывать Runnable в фактический класс класса Runnable, а затем обращаться к полям через ссылку downcast. Или еще лучше, сделайте поля частными и получите доступ к ним через вызовы getter/setter в ссылке.

Это может быть неудобно, если ваш Runnable является анонимным внутренним классом. В этом случае вам может потребоваться включить его в именованный класс: либо вложенный, либо внутренний, либо верхний.

С другой стороны, если вы говорите о static полях или методах класса реализации Runnable, вы можете просто использовать их, как обычно, при условии, что модификаторы доступа разрешают это.

  • 0
    Я наткнулся на ваш пост в поисках решения, но это не работает. Аргумент Runnable для beforeExecute и afterExecute на самом деле является java.util.concurrent.FutureTask, который не может быть приведен к моей реализации Runnable. Я использую Java 7, поэтому я не знаю, был ли изменен ThreadPoolExecutor с момента вашего сообщения. Может быть, это причина того, почему это не работает.
  • 0
    Я столкнулся с точно такой же проблемой. У меня есть свой собственный класс, который реализует Runnable . Я думал, что beforeExecute () будет хорошей отправной точкой для уведомления слушателя о том, что теперь мой исполняемый файл начинает свое выполнение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню