Невозможно сделать бассейн кэширования с ограничением размера?JAVA

Программисты JAVA общаются здесь
Anonymous
Невозможно сделать бассейн кэширования с ограничением размера?

Сообщение Anonymous »

Кажется невозможным создать пул кэшированного потока с ограничением количества потоков, которые он может создать. реализовано в стандартной библиотеке Java: < /p>

Код: Выделить всё

 public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue());
}
< /code>
Итак, используя этот шаблон, чтобы продолжить для создания пула потоков с фиксированным размером: < /p>
new ThreadPoolExecutor(0, 3, 60L, TimeUnit.SECONDS, new SynchronusQueue());
< /code>
Теперь, если вы используете это, и отправите 3 задачи, все будет хорошо.  Предоставление любых дальнейших задач приведет к отклоненным исключениям выполнения.new ThreadPoolExecutor(0, 3, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue());
< /code>
приведет к тому, что все потоки выполняются последовательно.  То есть пул потоков никогда не создаст более одного потока для выполнения ваших задач.  Или, может быть, это намеренно?  Или есть какой -то другой способ? из потоков, которые он может создать, и возможность продолжать стоять в очереди дополнительные задачи, как только он достигнет предела потока.  Согласно ответу Сьли, это невозможно.  Глядя на метод execute () 
threadpoolexecutor , это действительно невозможно. Мне нужно было бы подкласс ThreadPoolexeCutor и переопределить execute () несколько как SwingWorker , но то, что SwingWorker делает в своем execute () полным взломом.

Подробнее здесь: https://stackoverflow.com/questions/180 ... size-limit

Вернуться в «JAVA»