如何同时加载文件时决定线程号

Cla*_*Bao 1 java multithreading

我正在编码来解决这样的问题.大约有50到200个小文件.这些文件的总大小不会很大.我的目标是同时将它们加载到一个表中.

似乎代码运行得很好,它确实比使用单线程更快.

但是,我有点不确定.打开与文件号一样多的线程是否是最好的选择?

另一件事是我只用最简单的方法来做多线程.这也是最好的选择吗?

任何建议或意见表示赞赏!

 for (int i = 0; i < threads.length; ++i) {
                        synchronized (threads[i]) {
                            threads[i].run();
                        }
                    }
                    for (int i = 0; i < threads.length; ++i) {
                        synchronized (threads[i]) {
                            try {
                                threads[i].join();
                            } catch (InterruptedException e1) {
                                 return;
                            }
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

Tud*_*dor 5

第一件事:线程是以start(),而不是run().run()将使它们在主线程上串行运行.

第二件事:启动200个线程毫无意义.您只是浪费时间和系统资源而没有获得任何加速(您不能以比处理器核心数更大的速度更快).只需使用ExecutorService并使用排队任务submit.此托管线程池将根据您的系统资源选择正确的线程数.

第三件事:如果您只是单独处理某些文件,则不需要任何锁定.特别是在您的示例中,您使用锁来启动和连接线程,这些线程没有(正面)效果.

编辑:在您的情况下,最好的解决方案可能只是实现单一生产者(从磁盘读取),多用户(处理文件)系统.