如您所说,您可能需要检查所有对,并且没有启发式方法可以帮助我们检查检查顺序,因此如果检查不需要任何导致 CPU 浪费的 I/O 或某事,如果您有 4 个示例4
核心,请创建4
线程(0-3) 和线程 i 负责检查a(4k+i)
和每个b
. 并且在每次检查每个线程之前,您必须检查是否找到了真正的对,这可以通过扩展类中的静态变量来完成Thread
public class Worker extends Thread{
static int found=0;
/**
* @param args the command line arguments
*/
List<Matrix> a;
List<Matrix> b;
int myid;
int coreNumber;
Worker(List<Matrix> a, List<Matrix> b, int myid,int coreNumber){
this.a=a;
this.b=b;
this.myid=myid;
this.coreNumber=coreNumber;
}
@Override
public void run() {
for(int i=myid;i<a.size();i+=coreNumber){
for(int j=0;j<b.size();j++){
if(found==1){
return;
}
if(check(a.get(i),b.get(j))){
found=1;
return;
}
}
}
}
}
您需要等到所有线程停止工作。