我有一个循环操作 很慢, 如下for i= 1 : 512
for j = 1: 512
大计算量操作.
end
end
每次循环的大计算量操作. 写操作没有相互的效果 也就是说 i=1 j=1 和 i=1 j=2 可以同时操作 不影响结果...希望我表达清楚了.但是有同时的读操作..也就是说要经常读一个内容(数组).需要经常调用同一个对象读.这样搞成多线程可行么/? 大概怎么拆分合适?
希望给指点指点!多谢!
for j = 1: 512
大计算量操作.
end
end
每次循环的大计算量操作. 写操作没有相互的效果 也就是说 i=1 j=1 和 i=1 j=2 可以同时操作 不影响结果...希望我表达清楚了.但是有同时的读操作..也就是说要经常读一个内容(数组).需要经常调用同一个对象读.这样搞成多线程可行么/? 大概怎么拆分合适?
希望给指点指点!多谢!
for j = 1: 512
new YourThread(j).execute();
end;
end;你这种用多线程性能可以能不会有多少提高。还是优先优化自己的代码吧
for i= 1 : 512
for j = 1: 512
new YourThread(i, j, [yourShareObject]).start();
end;
end;
只是针对某一数组的操作,觉得不需要用多线程啊。多线程往往是针对多事件的处理。照你的意思,如果只是做数学计算的话,一次循环做一个计算效率肯定比多线程来得高。
如果你部署的环境是多CPU的话可以考虑加几个线程。多线程能提高效率的话主要是针对能并发的事件,你现在的瓶颈应该是在CPU的时间片分配上。
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);
}
}