Способы использования результата из вызываемого без блокировки - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть класс A, который получает различные независимые задачи (каждая из которых расширяет абстрактный класс B, который реализует Callable) от слушателя, и назначает один поток для каждой задачи. Я хотел бы знать, есть лиСуществуют шаблоны, которые могут использовать результаты этих задач без блокировки потока класса A, например, что происходит при использовании submit() с Future.get().

Результат, который я ищу, может быть достигнутдобавив к задаче гипотетический потребительский код;тем не менее, в обозримом будущем код, который я хочу выполнить, будет идентичен, и по мере того, как я буду выполнять больше задач, мой мозг обезьяны, скорее всего, забудет много добавлять код.

Мое настоящее лучшее потенциальное решение -просто чтобы класс B реализовал Runnable, поместил потребительский код в run() и код задачи в другой метод и передал параметры задаче через ее конструктор, который затем сохраняет их как переменные класса, которые будут использоваться при вызове.Однако для этого шаблона требуются дополнительные конструкторы и некоторые переменные класса, которые действительно должны быть только локальными переменными.Кроме того, при использовании этого метода я столкнулся с другими проблемами, такими как исключения NoSuchMethod при копировании задач (я использую .getClass().getConstructor(sth.class, sthelse.class).newInstance(sth, sthelse)), даже если я создал конструктор.

Поэтому мне интересно, есть ли какие-либо другиеопции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...