现在我的程序 。。 对文件进行分析。。 在单线程的时候 一个小时 可以解析 215~225个文件
  现在用了线程池 设置大小为2 一个小时 才解析 110个文件 效率反而降低不少
    每个线程都解析自己的文件 没有公用的 模块。只有公用的数据库 但是数据库是只是插入。。
  有没有什么想法 修改呢。。
   希望大家给我个想法

解决方案 »

  1.   

    那只能说明你的文件的数据量大
    或者是你解析的算法太占空间或者cpu既然这样 还不如单线程。也可以把代码拿出来研究演剧
      

  2.   

    我只知道在线程数少的情况可以优化。加速。
    线程数大的情况,cpu就会做很多上下文转化,反而效率不好。
      

  3.   

    对于单cpu不考虑中断,单一线程的顺序执行,比n个线程同时运行运行要快,就像2楼说的那样,因为单cpu的多线程其实在某段时间cpu就能执行一个线程,当时间片到了,就切换线程,而线程之间的切换又会耗时耗资源。我想如果你把你的程序在一个多cpu的电脑上跑跑,应该会看到,多线程的效果。
      

  4.   

    朋友这个主要是你的线程设计有问题!!
    在java中这种问题多的是!前几天我就遇到了这样的问题
    看下你的线程的结构!!
    尽量少new 对象
      

  5.   

    看瓶颈在哪里,jvm的free memory,以及CPU,还有IO读写,都监控一下
      

  6.   

    因为cpu每次只能调度一个线程执行。你使用了线程池有多个线程,cpu需要切换线程。花费时间。这就是操作系统中的并发问题。
      

  7.   

    如果读出来的文件需要做很复杂的分析或计算,那可以这样:使用一个线程专门负责读取文件把一行一行数据加到 LinkedBlockingQueue 中去,其他多个线程负责从这个队列中读取并处理。
      

  8.   

    TO :bao110908  
       您说的用阻塞队列吧。。
         想过这个。。 现在我也把这个改成了阻塞队列
           我发现我的原因在那里了。。 我解析文件后 要对文件作大量的统计分析 和一些其他的操作。。
      昨天改了个存储过程。。 那个过程很耗时间。。 所以我的 这个多线程。。 运行起来比较慢。。
        就像 其他朋友说的,IO 并发为0  所以我的程序就堵在这里了。。
       我把存储改了。。 现在好多料。。 谢谢大家的意见 与看法。。