Aan de slagGa gratis aan de slag

Parallelle threads maken voor verwerking

Je ontwikkelt een applicatie voor financiële analyse die een groot aantal transacties moet verwerken. Elke transactie vereist CPU-intensieve berekeningen. De applicatie gebruikt nu een sequentiële aanpak, maar dat is te traag. Jij krijgt de taak om een multithreaded oplossing te implementeren om de prestaties te verbeteren.

De klasse Transaction is alvast voor je geladen.

Deze oefening maakt deel uit van de cursus

Code optimaliseren in Java

Cursus bekijken

Oefeninstructies

  • Maak Threads die processTransaction() uitvoeren.
  • Start alle threads.
  • Wacht tot alle threads klaar zijn.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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;
    }
}
Code bewerken en uitvoeren