Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rx java 并行数据库搜索上的Schedulers.io()_Rx Java - Fatal编程技术网

Rx java 并行数据库搜索上的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

我想知道在并行访问数据库表时,是应该使用Schedulers.io()还是Schedulers.newThread()

例如,如果我使用Schedulers.io()并行地从数千个表中选择记录,那么新创建的许多线程都在任务完成后的线程池中

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方法是否清理缓存的线程?还是会引起其他问题?谢谢你的回答。当线程的生命周期很短时,它可能是一个不错的选择,因为它可以在短时间内重用。然而,如果我需要数千个线程,它也有同样的问题,未使用的线程仍然存在。