1 package ch.hslu.exercises.sw05.input.ex2;
2
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5
6 import java.util.List;
7 import java.util.stream.Collectors;
8 import java.util.stream.IntStream;
9
10 public class DemoBankAccount {
11
12 private static final int number = 1_000;
13 private static final int amount = 5_000_000;
14 private static final List<BankAccount> sourceBankAccounts = IntStream.range(0, number)
15 .mapToObj(x -> new BankAccount(amount))
16 .collect(Collectors.toList());
17 private static final List<BankAccount> targetBankAccounts = IntStream.range(0, number)
18 .mapToObj(x -> new BankAccount())
19 .collect(Collectors.toList());
20 private static final Logger LOG = LoggerFactory.getLogger(DemoBankAccount.class);
21
22 public static void main(String[] args) {
23 final Thread[] threads = new Thread[number * 2];
24 for (int i = 0; i < number; i++) {
25 threads[i] = new Thread(new AccountTask(sourceBankAccounts.get(i), targetBankAccounts.get(i), amount));
26 threads[i + number] = new Thread(new AccountTask(targetBankAccounts.get(i), sourceBankAccounts.get(i), amount));
27 }
28 for (final Thread thread : threads) {
29 thread.start();
30 }
31 for (final Thread thread : threads) {
32 try {
33 thread.join();
34 } catch (InterruptedException e) {
35 return;
36 }
37 }
38
39
40 LOG.info("Bank accounts after transfers");
41 for (int i = 0; i < number; i++) {
42 LOG.info("source({}) = {}; target({}) = {};", i, sourceBankAccounts.get(i).getBalance(), i, targetBankAccounts.get(i).getBalance());
43 }
44 }
45 }