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