Java - 管理大量线程与多核

时间:2011-07-05 14:57:16

标签: java multithreading

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

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

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

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

由于

2 个答案:

答案 0 :(得分: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);
        }
    });
}

答案 1 :(得分:2)

PC上的16个线程?

查看我的Windows任务管理器/性能,它显示了1238个运行的线程。它甚至没有出汗。顶级进程是sidebar.exe - 66个主题。

好的,所以你正在运行一些其他U ** xy OS - 16个线程也不太可能是那里的问题。

16个线程什么都没有。如果它们都是CPU密集型的,那么盒子就会被加载,但是,嘿,这就是重点!

如果必须尝试使用​​池,可能尝试提高性能,但不要仅仅因为您担心16个线程对您的操作系统而言太过分了。

RGDS, 马丁