Buonasera,
premetto che conosco java ma non ho mai usato i thread.
Avendo un computer multiprocessore volevo provare a velocizzare una routine inventata.
Di seguito il codice:
public class SimpleRunner extends Thread
{
private boolean stopThread = false;
private long[] p1={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
private long[] p2={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
private long[] p3={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
private long[] p4={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
private long[] p5={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
private long[] p6={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
private long[] p7={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
private long[] p8={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
public void run()
{
while (! stopThread)
{
long prodotto=0;
for(int a=0;a<15;a++)
for(int b=0;b<15;b++)
for(int c=0;c<15;c++)
for(int d=0;d<15;d++)
for(int e=0;e<15;e++)
for(int f=0;f<15;f++)
for(int g=0;g<15;g++)
for(int h=0;h<15;h++)
{
if(p1[a]+p2[b]+p3[c]+p4[d]+p5[e]+p6[f]+p7[g]+p8[h]==120){
System.out.println(a+b+c+d+e+f);
stopRunning();
}
}
System.out.println("Finito!");
stopRunning();
}
}
public void stopRunning()
{
stopThread = true;
}
}
public class CalcoloNoThread {
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
long inizio=System.currentTimeMillis();
SimpleRunner t1=new SimpleRunner();
SimpleRunner t2=new SimpleRunner();
t1.start();
t2.start();
t1.join();
t2.join();
long fine=System.currentTimeMillis();
System.out.println("Tempo impiegato:"+(fine-inizio)+" ms");
}
}
Tuttavia eseguendo il codice sia t1 che t2 eseguono tutto ciò che è contenuto nel run(io pensavo che si tenesse memoria di dove si era giunti nei for innestati) aumentando i tempi al posto che diminuirli.
Dove sto sbagliando?
Stefano