Как освободить ThreadPool, если поток ожидает ресурс, а другой поток может выполняться?
А где они должны занимать место по вашему? Все потоки создаваемые executor'ом рождаются, работаю и умирают "внутри" пула. Если вам надо выполнять больше потоков, либо увеличивайте лимит, либо используйте CachedThreadPool. Чтобы поток занимался чем-нибудь другим в процессе ожидания ресурса, вам придётся самому переписать ваши Runnable\Callabe-таски, чтобы они проверяли состояние ресурса и в случае его блокировки делали что-нибудь другое.
А где они должны занимать место по вашему? Все потоки создаваемые executor'ом рождаются, работаю и умирают "внутри" пула. Если вам надо выполнять больше потоков, либо увеличивайте лимит, либо используйте CachedThreadPool. Чтобы поток занимался чем-нибудь другим в процессе ожидания ресурса, вам придётся самому переписать ваши Runnable\Callabe-таски, чтобы они проверяли состояние ресурса и в случае его блокировки делали что-нибудь другое.