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
Oefeninstructies
- Maak
Threads dieprocessTransaction()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;
}
}