У меня есть не потокобезопасный объект, который я использую при выполнении Runnable. Однако создание этого объекта требует больших затрат, а их создание в каждом Runnable вызывает слишком много накладных расходов. Вместо этого я хочу, чтобы ThreadPoolExecutor использовал мой пользовательский поток, который имеет дополнительное поле, и делился этим полем между экземплярами Runnable, работающими в одном потоке.
Я создал собственный класс Thread с моим настраиваемым полем. Я создаю ThreadPoolExecutor следующим образом:
executor = new ThreadPoolExecutor(5, 50, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), new CustomThreadFactory())
CustomThreadFactory создает мой пользовательский метод Thread in newThread(Runnable r)
. Однако, чтобы использовать поле в экземплярах Runnable, мне также нужно было создать свой собственный Runnable, который берет ссылку на мой объект, не являющийся потоком, и сохраняет его для использования в методе run().
Однако, поскольку ThreadPoolExecutor использует Workers для выполнения экземпляров Runnable, я не смог вызвать свой объект, не являющийся потокобезопасным, для экземпляров Runnable. Есть ли удобный способ сделать это с помощью ThreadPoolExecutor или мне нужно создать собственный ThreadPoolExecutor?