Rx java 并行数据库搜索上的Schedulers.io()
我想知道在并行访问数据库表时,是应该使用Schedulers.io()还是Schedulers.newThread() 例如,如果我使用Schedulers.io()并行地从数千个表中选择记录,那么新创建的许多线程都在任务完成后的线程池中Rx java 并行数据库搜索上的Schedulers.io(),rx-java,Rx Java,我想知道在并行访问数据库表时,是应该使用Schedulers.io()还是Schedulers.newThread() 例如,如果我使用Schedulers.io()并行地从数千个表中选择记录,那么新创建的许多线程都在任务完成后的线程池中 Observabe.just("table1", "table2", "table3"...) .flatMap(t -> { // creating the observable that emits the record
Observabe.just("table1", "table2", "table3"...)
.flatMap(t -> {
// creating the observable that emits the record
return Observable create(s -> {
Record rec = selectFrom(t);
s.onNext(rec);
s.onCompleted();
})
.subscribeOn(Schedulers.io()); // select in parallel
})...
但是,如果这样的任务是夜间批处理的,那么这些线程不必在线程池中,因为它们中的大多数在大多数时间都不需要
在本例中,我认为应该使用Schedulers.newThread()。是否正确?如果要限制io并行工作,请使用自定义的
计划程序:
Scheduler=Schedulers.from(Executors.newFixedThreadPool(6))代码>听起来不错Schedulers.io()
是一个无边界的线程池,这意味着如果一次运行大量线程,将向池中添加大量线程。如果这不是您想要的,您可以使用.newThread()
在使用完每个线程后将其丢弃。你可能应该把你的问题重述成一个问题,然后把答案部分移到一个答案上,然后接受它。我仍然不知道这样是否会更好。如果我使用Schedulers.io()
并调用Schedulers.shutdown()
,shutdown方法是否清理缓存的线程?还是会引起其他问题?谢谢你的回答。当线程的生命周期很短时,它可能是一个不错的选择,因为它可以在短时间内重用。然而,如果我需要数千个线程,它也有同样的问题,未使用的线程仍然存在。