Sto lavorando per migliorare le mie competenze java ma un po 'incerto su come gestire questa applicazione multi-thread. Fondamentalmente, il programma legge un file di testo e trova il numero più grande. Ho aggiunto un ciclo for all'interno del mio algoritmo di ricerca per creare 10 thread ma non sono sicuro che stia effettivamente creando 10 thread. L'idea è di migliorare i tempi di esecuzione, o almeno questo è quello che presumo dovrebbe accadere. È comunque necessario verificare se l'ho fatto correttamente e se il tempo di esecuzione è effettivamente migliorato?Utilizzo di 10 thread per elaborare una matrice
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ProcessDataFile {
public static void main(String[] args) throws IOException {
int max = Integer.MIN_VALUE;
int i = 0;
int[] numbers = new int[100000];
String datafile = "dataset529.txt"; //string which contains datafile
String line; //current line of text file
try (BufferedReader br = new BufferedReader(new FileReader(datafile))) { //reads in the datafile
while ((line = br.readLine()) != null) { //reads through each line
numbers[i++] = Integer.parseInt(line); //pulls out the number of each line and puts it in numbers[]
}
}
for (i = 0; i < 10000; i++){ //loop to go through each number in the file and compare it to find the largest int.
for(int j = 0; j < 10; j++) { //creates 10 threads
new Thread();
}
if (max < numbers[i]) //As max gets bigger it checks the array and keeps increasing it as it finds a larger int.
max = numbers[i]; //Sets max equal to the final highest value found.
}
System.out.println("The largest number in DataSet529 is: " + max);
}
}
Probabilmente si vorrà iniziare dando un'occhiata al [Concurrency Trail] (https://docs.oracle.com/javase/tutorial/essential/concurrency/). Semplicemente creare un 'nuovo Thread()' in realtà non fa nulla. Una delle cose che potrebbe essere necessario prendere in considerazione è la creazione di un thread che è responsabile della ricerca del valore più grande all'interno di un determinato intervallo dell'array fornito. In questo modo (nel tuo caso) finirai con 10 valori (1 per ogni thread), che poi determineresti quale era il massimo – MadProgrammer
Ah, quindi fai scorrere ciascun thread per 1/10 del set. Quindi confrontare il valore di ogni filo trovato? – Vortex11
Fondamentalmente, è un po 'più complicato come è necessario sapere quando ogni thread è completato, ecc, ma questa è l'idea di base – MadProgrammer