Page 245 - 6571
P. 245
до них із різних потоків. У наступному прикладі програми іміту-
ється робота банку з декількома рахунками. Згенеруємо випадко-
вим чином декілька транзакції, що переводять гроші з одного ра-
хунку на інший. Кожна транзакція переміщає довільну суму гро-
шей з рахунку, що обслуговується поточним потоком, на іншій
довільно обираний рахунок.
У коді, що імітує роботу банку визначено клас Bank та опи-
сано метод transfer(). Даний метод переміщує деяку суму
грошей з одного рахунку на інший. Нижче наведено можливий
код методу transfer() з класу Bank.
public void transfer() throws InterruptedException {
int amount = (int)(Math.random()*500);
if(account1 > amount) {
account1 = account1 - amount;
Thread.sleep(2000);
account2 = account2 + amount;
} else {
account1 = account1 + amount;
Thread.sleep(2000);
account2 = account2 - amount;
}
System.out.println("Account #1: " + account1 + "\t" +
"Account #2: " + account2 + "\t" +
"Total balance: " + totalBalance() + "\t");
}
Перевід грошей з фіксованого банківського рахунку викону-
ється у методі run() із класу TransferThread. Для цього з
метою виконання транзакції у методі run() із об’єкта класу
Bank викликається метод transfer().
public void run() {
for (int i=0; i<100; i++) {
try {
bank.transfer();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
244