Salve, sto cercando di apprendere qualcosa su i threads.
Quindi mi cimento a fare esperimenti.
Ho un array con 1.000.000 di elementi. Ora volevo verificare quante volte si presenta un numero.
Come ottimizzare il programma con i thread cercando di farne partire 3 o 5 e ridurre i tempi di scansione dell'array rispetto ad un programma che scansiona ad 1 posizione per volta in modo crescente o banalmente senza threads. ?!?
Codice PHP:
public class VerificaNumeriEstrattiConThreads implements Runnable {
private static int contatore = 0;
private int intervalloMin;
private int intervalloMax;
private int numeroDaVerificare;
private int[] array;
public VerificaNumeriEstrattiConThreads(int numeroDaVerficiare,int[] array, int intervalloMin,int intervalloMax)
{
this.numeroDaVerificare = numeroDaVerficiare; this.array = array;
this.intervalloMin = intervalloMin; this.intervalloMax = intervalloMax;
}
@Override public void run()
{
for(int i= intervalloMin; i <= intervalloMax; i++) {
if(array[i] == numeroDaVerificare)
{
incrementaContatore();
}
}
}
private synchronized void incrementaContatore() {
contatore++;
}
public static int getContatore()
{
return contatore;
}
public static void main(String[] args) throws InterruptedException
{
NumeriEstratti esnum = new NumeriEstratti(10);
Thread t1 = new Thread(new VerificaNumeriEstrattiConThreads(1, esnum.getArray(), 0, 2));
Thread t2 = new Thread(new VerificaNumeriEstrattiConThreads(1, esnum.getArray(), 3, 5));
Thread t3 = new Thread(new VerificaNumeriEstrattiConThreads(1, esnum.getArray(), 6, 9)); System.out.println(esnum.toString());
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.println(VerificaNumeriEstrattiConThreads.getContatore());
}
In questo esempio NumeriEstratti è l'array che in questo esempio per motivi pratici è stato ridotto a grandezza10.
Si può fare di meglio ??? La cosa più bruttina da fare è assegnare ad ogni thread un intervallo da controllare. Ma questo solo se si conosce la grandezza dell'array apriori.
Mettiamo caso esistesse un ArrayList di oggetti o semplicemente di Integer come è possibile farlo in quel caso che è dinamico ??
Come si può ottimizzare la soluzione quì sopra proposta??