2017-02-22 40 views
0

Я хотел бы использовать RxJava вместо моего однотридовой ExecutorService:Что эквивалентно однопоточному ExecutorService в RxJava?

private ExecutorService executor = Executors.newSingleThreadExecutor(); 
executor.submit(/* ... */); 

Я задавался вопросом, что является эквивалентом установки с помощью RxJava? То, что я пытался до сих пор:

private Subject<MyClass> subject = PublishSubject.create() 
subject.toFlowable(MISSING) 
      .observeOn(Schedulers.single()) 
      .subscribeOn(Schedulers.single()).subscribe(obj -> { 
     // handle on next 
    }); 

Это эквивалентно установке ExecutorService у меня выше, или по-другому? Получить новый однопоточный исполнитель с Schedulers.single()?

ответ

1

Зависит от жизненного цикла вашего ExecutorService. Если он является прикладной и привязан к его жизненному циклу, то Schedulers.single() эквивалентен ему.

Если у вас несколько экземпляров с одной резьбой ExecutorService и вы хотите, чтобы ваши этапы потока обрабатывались на разных, но конкретных потоках, то нет. У вас есть два варианты отсюда:

1) Если единственное требование в настоящее время в разных потоках, но это может измениться на каждом независимый абоненте, вы можете использовать io() или computation()

2) Если вы хотите резьбовое ограничьте этапы для каждого независимого абонента, вы можете использовать несколько Schedulers.from(Executor) с ExecutorService или использовать RxJavaPlugins.createNewSingleScheduler(ThreadFactory). Если у вас есть шанс полагаться на внутренние компоненты, вы также можете просто new SingleScheduler().

+0

То, что я хочу достичь, - это обработать объекты, которые я нажимаю на свой «Предмет» в одном потоке. Мой «ExecutorService» является локальным, и мне все равно, какой стук подталкивает к моей теме. __Примечание that__ У меня есть только один «Абонент». –

+0

Затем вы можете использовать любой из 'Schedulers.single()' или 'Schedulers.from (Executor)'. – akarnokd