我有一个循环操作 很慢, 如下for i= 1 : 512
  for j = 1: 512
  
     大计算量操作.  
  end
end
每次循环的大计算量操作. 写操作没有相互的效果  也就是说 i=1 j=1 和 i=1 j=2 可以同时操作 不影响结果...希望我表达清楚了.但是有同时的读操作..也就是说要经常读一个内容(数组).需要经常调用同一个对象读.这样搞成多线程可行么/? 大概怎么拆分合适?
希望给指点指点!多谢!

解决方案 »

  1.   

    for i= 1 : 512
      for j = 1: 512
        new YourThread(j).execute();
      end;
    end;你这种用多线程性能可以能不会有多少提高。还是优先优化自己的代码吧
      

  2.   

    如果写操作没有像互相影响,只是读同一个数组(估计i,j就是数组元素的位置),那么可以不用锁数组对象,性能相对有所提高。
    for i= 1 : 512
      for j = 1: 512
      new YourThread(i, j, [yourShareObject]).start();
      end;
    end;
      

  3.   

    建议用线程池来做,自己new thread,因为线程过多,耗资源
      

  4.   


    只是针对某一数组的操作,觉得不需要用多线程啊。多线程往往是针对多事件的处理。照你的意思,如果只是做数学计算的话,一次循环做一个计算效率肯定比多线程来得高。
    如果你部署的环境是多CPU的话可以考虑加几个线程。多线程能提高效率的话主要是针对能并发的事件,你现在的瓶颈应该是在CPU的时间片分配上。
      

  5.   


    public class Test
    {
    public static void main(String[] args)
    {
    for (int i = 0; i < args.length; i++)
    {
    for (int k = 0; k < args.length; k++)
    {
    new MyThread(i,k).start();
    }
    }
    }

    }class MyThread extends Thread{
    private int i;
    private int k;
    public MyThread(int i,int k){
    this.i = i;
    this.k = k;
    }

    @Override
    public void run()
    {
    // My example
    System.out.println(i+k);
    }
    }
      

  6.   

    将计算任务分成等分,使用 java.util.concurrent.CountDownLatch 进行阻塞,直到所有的任务全部完成 CountDownLatch 就可以释放,合并计算结果。
      

  7.   

    楼主 建议你去javaeye去看一下吧 在上面搜索 总之 好几个网站一起用会对你有帮助的
      

  8.   

    看机器的cpu是几核的,如果线程数超过核数,性能其实是下降的。每个核分配一个线程,才能最大程度的利用cpu也就是说,如果你的程序在单核电脑上跑,不要用多线程。如果在双核上跑,就用双线程