Začněte nyníZačněte zdarma

Vytváření paralelních vláken pro zpracování dat

Vyvíjíš aplikaci pro finanční analýzu, která potřebuje zpracovat velké množství transakcí. Každá transakce vyžaduje výpočetně náročné operace. Aplikace aktuálně využívá sekvenční přístup, který je ale příliš pomalý. Tvým úkolem je implementovat vícevláknové řešení pro zlepšení výkonu.

Třída Transaction je pro tebe předem načtena.

Toto cvičení je součástí kurzu

Optimalizace kódu v Javě

Zobrazit kurz

Pokyny k cvičení

  • Vytvoř vlákna Thread, která budou spouštět processTransaction().
  • Spusť všechna vlákna.
  • Počkej na dokončení všech vláken.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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;
    }
}
Upravit a spustit kód