Comece agoraComece grátis

Criando threads paralelas para processamento

Você está desenvolvendo um aplicativo de análise financeira que precisa processar um grande número de transações. Cada transação exige cálculos intensivos de CPU. O aplicativo atualmente usa uma abordagem sequencial, mas está muito lento. Sua tarefa é implementar uma solução multithread para melhorar o desempenho.

A classe Transaction foi pré-carregada para você.

Este exercicio faz parte do curso

Otimização de Código em Java

Ver curso

Instruções do exercicio

  • Crie Threads que executem processTransaction().
  • Inicie todas as threads.
  • Aguarde todas as threads terminarem.

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

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;
    }
}
Editar e Executar Código