Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Mateusz Nowak
- //package kryzys;
- import java.util.Iterator;
- import java.util.Map.Entry;
- import java.util.SortedMap;
- import java.util.TreeMap;
- import java.util.concurrent.Semaphore;
- import java.util.concurrent.atomic.AtomicInteger;
- <b style="color:black;background-color:#ffff66">public</b> class Bank {
- class BlockedKonto {
- BlockedKonto(Konto konto) {
- konto_ = konto;
- blokada = new Semaphore(1);
- }
- <b style="color:black;background-color:#ffff66">public</b> boolean pobierz(<b style="color:white;background-color:#886800">int</b> x) {
- try {
- konto_.pobierz(x);
- } catch (Exception ex) {
- return false;
- }
- return true;
- }
- <b style="color:black;background-color:#ffff66">public</b> boolean wplac(<b style="color:white;background-color:#886800">int</b> x) {
- try {
- konto_.wplac(x);
- } catch (Exception ex) {
- return false;
- }
- return true;
- }
- <b style="color:black;background-color:#ffff66">public</b> Konto get() {
- try {
- blokada.acquire();
- return konto_;
- } catch (InterruptedException ex) {
- return konto_;
- }
- }
- <b style="color:black;background-color:#ffff66">public</b> <b style="color:black;background-color:#a0ffff">void</b> set(Konto konto) {
- konto_ = konto;
- blokada.release();
- }
- @Override
- <b style="color:black;background-color:#ffff66">public</b> <b style="color:black;background-color:#ff9999">String</b> toString() {
- return konto_.numer() + " " + (blokada.availablePermits() > 0 ? (konto_.stan() + "\n") : "zablokowane\n");
- }
- private Semaphore blokada;
- private Konto konto_;
- }
- <b style="color:black;background-color:#ffff66">public</b> Bank() {
- konta = new TreeMap<<b style="color:black;background-color:#ff9999">String</b>, BlockedKonto>();
- iloscTrwajacychTransakcji = new AtomicInteger(0);
- iloscZakonczonychTransakcji = new AtomicInteger(0);
- }
- <b style="color:black;background-color:#ffff66">public</b> <b style="color:black;background-color:#a0ffff">void</b> rejestruj(Konto konto) {
- konta.put(konto.numer(), new BlockedKonto(konto));
- }
- <b style="color:black;background-color:#ffff66">public</b> <b style="color:black;background-color:#a0ffff">void</b> <b style="color:black;background-color:#99ff99">transakcja</b>(<b style="color:black;background-color:#ff9999">String</b> <b style="color:black;background-color:#ff66ff">numerKontaZrodlowego</b>, <b style="color:black;background-color:#ff9999">String</b> <b style="color:white;background-color:#00aa00">numerKontaDocelowego</b>, <b style="color:white;background-color:#886800">int</b> <b style="color:white;background-color:#004699">kwota</b>) {
- iloscTrwajacychTransakcji.incrementAndGet();
- try {
- BlockedKonto blokowaneKontoZrodlowe = konta.get(<b style="color:black;background-color:#ff66ff">numerKontaZrodlowego</b>);
- BlockedKonto blokowaneKontoDocelowe = konta.get(<b style="color:white;background-color:#00aa00">numerKontaDocelowego</b>);
- Konto kontoZrodlowe = blokowaneKontoZrodlowe.get();
- Konto kontoDocelowe = blokowaneKontoDocelowe.get();
- if (blokowaneKontoZrodlowe.pobierz(<b style="color:white;background-color:#004699">kwota</b>)) {
- if (!blokowaneKontoDocelowe.wplac(<b style="color:white;background-color:#004699">kwota</b>)) {
- blokowaneKontoZrodlowe.wplac(<b style="color:white;background-color:#004699">kwota</b>);
- }
- }
- blokowaneKontoDocelowe.set(kontoDocelowe);
- blokowaneKontoZrodlowe.set(kontoZrodlowe);
- konta.put(<b style="color:black;background-color:#ff66ff">numerKontaZrodlowego</b>, blokowaneKontoZrodlowe);
- konta.put(<b style="color:white;background-color:#00aa00">numerKontaDocelowego</b>, blokowaneKontoDocelowe);
- iloscTrwajacychTransakcji.decrementAndGet();
- iloscZakonczonychTransakcji.incrementAndGet();
- } catch (Exception ex) {
- }
- }
- <b style="color:black;background-color:#ffff66">public</b> <b style="color:black;background-color:#ff9999">String</b> raport() {
- StringBuffer sb = new StringBuffer();
- Iterator itr = konta.entrySet().iterator();
- while (itr.hasNext()) {
- Entry<<b style="color:black;background-color:#ff9999">String</b>, BlockedKonto> item = (Entry<<b style="color:black;background-color:#ff9999">String</b>, BlockedKonto>) itr.next();
- sb.append(item.getValue().toString());
- }
- sb.append(iloscZakonczonychTransakcji + " ");
- sb.append(iloscTrwajacychTransakcji + "\n");
- return sb.toString();
- }
- <b style="color:black;background-color:#ffff66">public</b> volatile AtomicInteger iloscZakonczonychTransakcji;
- <b style="color:black;background-color:#ffff66">public</b> volatile AtomicInteger iloscTrwajacychTransakcji;
- private SortedMap<<b style="color:black;background-color:#ff9999">String</b>, BlockedKonto> konta;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement