IniziaInizia gratis

Creare thread paralleli per l'elaborazione

Stai sviluppando un'applicazione di analisi finanziaria che deve elaborare un grande numero di transazioni. Ogni transazione richiede calcoli intensivi sulla CPU. L'applicazione al momento usa un approccio sequenziale, ma è troppo lenta. Ti è stato chiesto di implementare una soluzione multi-thread per migliorare le prestazioni.

La classe Transaction è stata precaricata per te.

Questo esercizio fa parte del corso

Ottimizzazione del codice in Java

Visualizza il corso

Istruzioni dell'esercizio

  • Crea Thread che eseguano processTransaction().
  • Avvia tutti i thread.
  • Attendi che tutti i thread terminino.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

public class TransactionProcessor {
    public static void main(String[] args) throws InterruptedException {
        List transactions = generateTransactions(1000);
        List threads = new ArrayList<>();
        for (int t = 0; t < 4; t++) {
            int start = t * 250;
            int end = (t == 3) ? transactions.size() : (t + 1) * 250;

            // Create thread that will run processTransaction()
            Thread thread = new ____(() -> {
                for (int i = start; i < end; i++) {
                    processTransaction(transactions.get(i));
                }
            });
            threads.add(thread);
            // Start the thread
            thread.____(); 
        }

        // Wait for all threads to complete
        for (Thread thread : threads) {
            thread.____();
        }
    }

    static void processTransaction(Transaction tx) {
        double result = 0;
        for (int i = 0; i < 1000; i++) {
            result += Math.sqrt(tx.amount * i);
        }
        tx.result = result;
    }

    static List generateTransactions(int n) {
        List list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(new Transaction(Math.random() * 1000));
        }
        return list;
    }
}
Modifica ed esegui il codice