CUi\ 04'tl-
p*lK synchrooiztd Wid transferom fr<» ml to tnt dnount) threws Inter rvpt«d£«»Ct'0°
■mit iocccuntł[frt»] < ***** )
-aitU // oczekuje na spełnienie Jecyneęo warunku zwijanego z oiocadn actorts^n*] -- anuit accognlłttoj *• «*oi/’t
notifyAlil). H pa»'*d***« wwystHe «atk' oczekujące spełnienia u
puUMł syncftromzw double geUowiBaiancou j |
prwete double accoumii
Jak łatwo /auwazyć. w wyniku zastosowania słowj kluczowego Syrchronizefl uzyskujemy bardziej zwięzły kod Aby /rozumieć jego działanie, musimy jednak wiedzieć, ze z każdym obiektem związana jest niejawna blokada posiadająca pojedynczy warunek. Blokada la zarządza wątkami, które próbują wykonać metodę zadeklarowaną jako Syncwomzed. \k nrunek zarządza wątkami, które wywołały metodę wąit.
Jednak niejawne blokady I związane z nimi warunki posiadają pewne ograniczenia Należą do nich między innymi
■ Brak mothwoki przerwania wątku, który próbuje uzy skać blokadę
■ Brak możliwości wyspecyfikowania limitu czasu dla wątku, który próbuje uzyskać blokadę
■ Pojedynczy warunek dla blokady może być niewystarczający.
■ Odwzorowania blokad używanych przez maszynę wirtualną Java na sprzętowe mechanizmy blokowania nie jest zbył efektywne
Kiedy używać w programach obiektów Lock ł Canduion, a kiedy deklaracji metod opatrzonych słowem kluczowym synchromied? Oto nasze wskazówki
l Najlepiej nic stosować wcale ani obiektów lock/Coruit. lun. ani słowa kluczowego sync.hror i z*q. W wiciu sytuacjach lepiej jest skorzystać z mechanizmów dostarczanych przez pakiet javą uiil concurrent. które same zajmują się odpowiednią synchronizacją dostępu. Na przykład na stronic 70. pokażemy sposób u/ycia kolejki blokującej do synchronizacji wątków pracujących nad wspólnym zadaniem
1. Jeśli tylko moznn uz.yć słowa kluczowego 5ynt»ironiz«J. to należy stosować je W pierwszym rzędzie. Dzięki temu musimy pisać mniej kodu i mniejsze jest prawdopodobieństwo popełnienia błędu Ni listingu I 5 przedstawiony został kod
naszego przykładu symulacji banku napisany z zastosowaniem słowa kluczowego tjnfrcriire.
1' "lcdy. gdy rzeczywiście potrafimy
wykorzystać dodatkowe moZł.woSc, przez nic oferowane
Przynajmniej na razie zastosowanie słów a kluczowego .yr:rr; posiada jeszcze jedna przewagę- Narzędzia monitorujące działanie maszyny wirtualnej Java mogą raportować informacje o niejawnych blokadach i warunkach, co może okazać s*ę pomocne w wykrywaniu zakleszczeń. Upłynie jeszcze nieco czasu, zanim motfwośo te zostano rozszerzone na mechanizmy pakietu java uti 1 .concurrent
Progran Hut truj? bezpieczny dostęp wielu *4tków do tej struktury cny uZyciu taetcd zadeii.1 równy eh jako tyncnrotiizea
•/
Public ciast Syncheankfest?
(
Public ttatic *oid ■aintStrłngCI argi>
I
Bank p - new Bam 'MCCOUNTS INITIAt._Bflt.AW3l
mt 1.
for M - 0 » ' HflCCOUNTS \+*i
Transfer^unntfOle r - new TrantferRumafilefb. t. INinAL.BfltAflCT:
Threeu t • rei. Threadlrł; t starto.
pubiic Stalle fmal int KACCOUNTS * 100.
Public Katlc finał double JN2TIAL_8AtAMGĘ - 100#
i—
8an« O pewrej liczbie kant.
•z
ciast &jr*
ł
/*»
Tworzy bank bwrai? n liczb* kont
Pparan imtialBaiance początkowy ttan każdego lent* •Z
Public Ban*not n oouble muialBalancei
accounts • rew douClefn}: for (int 1-0. » < accounts.lengtn »*♦! accountt[ i) - initi*lBął*fic*ł
/*•
Rrz#l«*a pieniacze z jednego konta n» flrugie •parał* rnon konto nadawcy bparan to konto odoiorcy ♦para* Mount kwota przetawu
• / ■ ■
Public syncnromzeo rołO trantfer(int trem. »"t to doiOle tnrows lnt«Ticted£jr«>tton
i