CommencezCommencez gratuitement

Créer des threads parallèles pour le traitement

Vous développez une application d'analyse financière qui doit traiter un grand nombre de transactions. Chaque transaction exige des calculs intensifs pour le processeur. L'application fonctionne actuellement de façon séquentielle, mais elle est trop lente. Votre tâche consiste à mettre en place une solution multithread pour améliorer la performance.

La classe Transaction a été préchargée pour vous.

Cette activité fait partie du cours

Optimiser le code en Java

Voir le cours

Instructions de l’exercice

  • Créez des Thread qui exécuteront processTransaction().
  • Démarrez tous les threads.
  • Attendez que tous les threads soient terminés.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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;
    }
}
Modifier et exécuter le code