Skapa parallella trådar för bearbetning
Du utvecklar en finansanalysapplikation som behöver bearbeta ett stort antal transaktioner. Varje transaktion kräver beräkningsintensiva operationer. Applikationen använder för närvarande ett sekventiellt angreppssätt, men det är för långsamt. Din uppgift är att implementera en flertrådad lösning för att förbättra prestandan.
Klassen Transaction har förinslästs åt dig.
Den här övningen är en del av kursen
Optimera kod i Java
Övningsinstruktioner
- Skapa
Thread-objekt som körprocessTransaction(). - Starta alla trådar.
- Vänta på att alla trådar ska slutföras.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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;
}
}