/
Nicholas
/
java_basics
Обзор
Документация
Войти
/
Nicholas
/
java_basics
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Multithreading/Transactions/src/Main.java
66 строк
3 KB
Nicholay Sokolovsky
19.2 FIX
24 ноя 2023, 10:50
24 ноя 2023, 10:50
e7b22fa
Код
Авторство
О чём код?
public class Main { final static int MAXAMOUNT = 52650; final static int HALFOFMAXACC = 100; final static int HALFNUMOFTHREADS = 20; public static void forward(Bank bank) throws InterruptedException { for (int i = 1; i < bank.numOfAccounts(); i = i + 2) { String acc1 = Bank.ACCHEADER + String.format("%07d", i); String acc2 = Bank.ACCHEADER + String.format("%07d", i + 1); long amount = (long) (Math.random() * MAXAMOUNT); bank.transfer(acc1, acc2, amount); } } public static void backward(Bank bank) throws InterruptedException { for (int i = bank.numOfAccounts(); i > 1; i = i - 2) { String acc1 = Bank.ACCHEADER + String.format("%07d", i); String acc2 = Bank.ACCHEADER + String.format("%07d", i - 1); long amount = (long) (Math.random() * MAXAMOUNT); bank.transfer(acc1, acc2, amount); } } public static void info(Bank bank, long start) { System.out.println("Баланс банка после транзакций: " + bank.getSumAllAccounts()); System.out.println("Время выполнения: " + (System.currentTimeMillis() - start)); int k = 0; for (int i = 1; i <= bank.numOfAccounts(); i++) { String acc = Bank.ACCHEADER + String.format("%07d", i); //System.out.println("Сумма на счёте "+acc+" = "+bank.getBalance(acc)); if (bank.getBlockAcc(acc)) { k++; } } System.out.println("Заблокировано " + k + " счетов."); } public static void main(String[] args) throws InterruptedException { Bank bank = new Bank(); for (int i = 0; i < HALFOFMAXACC * 2; i++) { bank.openAccount(1000000); } System.out.println("Кол-во открытых счетов " + bank.numOfAccounts()); System.out.println("Баланс банка до транзакций: " + bank.getSumAllAccounts()); long start = System.currentTimeMillis(); for (int i = 0; i < HALFNUMOFTHREADS; i++) { new Thread(() -> { try { forward(bank); } catch (InterruptedException e) { throw new RuntimeException(e); } info(bank, start); }).start(); new Thread(() -> { try { backward(bank); } catch (InterruptedException e) { throw new RuntimeException(e); } info(bank, start); }).start(); } } }