2013-05-17 2 views
2

У меня возникают проблемы с тем, что JVM сразу же выходит из разных новых приложений. Я написал, какие потоки появляются в рамках Scala 2.10 Futures + Promises.Контекст выполнения без потоков демона для фьючерсов

Кажется, что по крайней мере с контекстом выполнения по умолчанию, даже если я использую блокировку, например.

future { blocking { /* work */ }} 

не запускается нитка не-демона, и поэтому JVM считает, что он может немедленно уйти.

Глупый труд - это запустить экземпляр dummy Thread, который просто ждет, но тогда мне также нужно убедиться, что этот поток остановится, когда процессы будут выполнены.

Итак, как мне заставить их работать на потоках не-демона?

+1

Что вы используете? ExecutionContext? Создаете ли вы его самостоятельно или получаете его из «ExecutionContext.global»? – cmbaxter

+0

Я думаю, что это происходит как с «глобальным», так и с созданием однопоточной, это в основном два сценария, которые у меня есть. –

ответ

3

Глядя на умолчанию ExecutionContext прикрепленной к ExecutionContext.global, это вилке присоединиться разнообразием и Threadfactory он использует наборы нити для daemon. Если вы хотите обойти это, вы можете использовать другой ExecutionContext, который вы сами настраиваете. Если вам по-прежнему нужен сорт FJP (и вы, вероятно, делаете его как можно больше), вы должны посмотреть, что они делают в ExecutionContextImpl с помощью этого link и создать что-то подобное. Или просто используйте пул кэшированных потоков через Executors.newCachedThreadPool, так как он не будет закрыт сразу перед завершением ваших фьючерсов.

+0

'private [scala]', grmpff. Но в любом случае спасибо за ссылку и подтвердили, что они установили демона в true (без какой-либо возможности настроить это, черт ...) –

1

порождение процессов

Если это означает, что процессы, а не только задачи, а затем scala.sys.process нерестится не-демон потоков для выполнения процессов ОС.

В противном случае, если вы создаете кучу задач, это то, с чем помогает Future.sequence. Затем просто выберите «Ожидание» («Список будущих последовательностей» (фьючерсы)) в основном потоке.

+0

Извините за неправильную формулировку. Нет, я выполняю вычисления в рамках своего процесса. Итак, потоки технически. –

Смежные вопросы