Java - 管理大量线程与多核

koz*_*her 0 java multithreading

我目前正在处理一个脚本,它为Mongo服务器的每个数据库进行一些检查和插入.这是多线程的.

for (int i = 0; i < countDatabase; i++) {     
    new threadDatabase(database.get(i).toString()).start();            
}
Run Code Online (Sandbox Code Playgroud)

问题:我有16个数据库要解析...我担心脚本将被设置的PC,将无法管理16个(或更多)线程...

任何想法如何处理大量的线程?我听说过pool,但不确定它是否可以处理我作为参数发送的数据库名称...

谢谢

gus*_*afc 5

16个线程不是很多线程.当然,它可能比你拥有CPU核心的线程更多,但是如果你正在与远程数据库交谈,你很可能花费大部分时间等待I/O完成,因此CPU不会成为限制因子.

除此之外,线程池可以正常工作:

ExecutorService executorService = ...;
for (int i = 0; i < countDatabase; i++) {     
    final String dbName = database.get(i).toString();
    executorService.submit(new Runnable(){
        @Override
        public void run() {
            parseDatabase(dbName);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)