X


Każdy jest innym i nikt sobą samym.

Obiekty i są przekazywane do konstruktorów
klas ) ! i # , które odpowiednio traktują je jak obiekty ) i / dowolnego typu
(to znaczy, że są one rzutowane w górę).
Tablica $ odwołań 1%$ nie jest inicjowana w miejscu swej definicji, ponieważ strumienie
potokowe nie mogą być ustawione przed wystąpieniem tej definicji (potrzeba istnienia bloku
na to nie pozwala).
7 5
)- & *+,
*-
*- ./0 /12
4 *- ./O 5% 54 /1(
) (
-)?@)(
4E (
4H (
0 9%% + 9 ,
) 4 %.+ < 1,
.> 1,
(
. #() !(==1
)?@ .1(
:
:
:
04 9%% + 9 ,
) 4 %.+ < 1,
C%
7! .1
. #() !(==1
)?@4 .1(
:
:
) .1,
4 .1(
9 . 89 .11(
4E .1(
,
4H . 1(
:!.;3<& 1,
0% ./4 )%54H /1(
:
) -)?@,
0 .12
0 G.12
0 H %.12
0 H %G.12
E.12
EG.12
0 .2 12
H .2 1
:(
+ 9 . 0 9.11(
. 1(
4 + 9 .
04 9.11(
.4 1(
:
)% .0 ?@ 1,
. - .12"D#2DD#1(
:
:A
W metodzie mamy pętlę przechodzącą przez całą tablicę i dodającą stan oraz pole
tekstowe % na stronę.
Kiedy tworzone są wątki 1%$ , to każdy z nich automatycznie tworzy i uruchamia swój wła-
sny % . Zatem wątki % będą działać, zanim wystartuje wątek 1%$ . Jest to istotne,
ponieważ niektóre z obiektów % zostaną zablokowane i zatrzymane, kiedy wątki 1%$
wystartują. Konieczne trzeba to zobaczyć, aby zrozumieć ten szczególny aspekt blokowania.
( #
Ponieważ wątki mogą być blokowane i ponieważ obiekty mogą posiadać metody synchronizowa-
ne, nie pozwalające wątkom na dostęp do tych obiektów, dopóki nie zostanie zwolniony zamek
synchronizacji, to jest możliwe, iż wątek utknie, oczekując na inny wątek, który czeka na inny
wątek itd., aż łańcuch powróci do wątku czekającego na ten pierwszy. Dostajemy zamkniętą pętlę
wątków, czekających na siebie wzajemnie, a żaden nie może się ruszyć — nazywa się to impasem
(ang. deadlock). Nadzieja, że taka trudna sytuacja zdarza się bardzo rzadko, nie pomaga, kiedy
przyjdzie nam testować i wyszukiwać błędy w kodzie, który wywołał impas.
Nie mamy wsparcia ze strony języka pomagającego unikać impasu — wszystko zależy od nas, czy
unikniemy go przez ostrożne projektowanie. Nie są to słowa pocieszające dla osoby, która usiłuje
usuwać błędy w programie, w którym wystąpił impas.
! "#$ %"#$ % "# "# &' (
Jedną ze zmian, dokonaną w Java 2, aby zmniejszyć możliwość impasu, jest niezalecanie nastę-
pujących metod klasy Thread: , , oraz .
Przyczyną tego, iż metoda stała się nie zalecana jest fakt, że nie zwalnia blokad, które wą-
tek posiada, i jeżeli obiekty są w stanie niespójnym („uszkodzone”), inne wątki mogą je w takim
stanie podglądać i modyfikować. Wynikające problemy mogą być subtelne i trudne do wykrycia.
Zamiast używać , powinieneś stosować się do tego, co zostało pokazane w przykładzie
1% ! i używać znaczników do informowania wątku, kiedy ma zakończyć się przez wyj-
ście ze swej metody .
Są sytuacje, kiedy wątek się blokuje — tak jak wtedy, gdy oczekuje na dane wejściowe — i nie
może sprawdzić znacznika, jak było to w 1% !. W takich przypadkach nadal nie powin-
no się używać , a zamiast tego można użyć metody z klasy , aby wydo-
stać się z zablokowanego kodu:
;
+ N
%.15)
; ! G##!! ##$
$
% & '(
% '(
% '(
% %) '(
-& 7! ,
) ! 5 .1,
,
.1(-
:!.; <& 1,
0% ./4 5 /1(
:
0% ./EN5 .1/1(
:
:
); & *+,
*-
*- ./4 5 /1(
-) -.1(
) .1,
4 .1(
9 . 89 .11(
. 1(
9 .
+ 9 .1,
)
4 %.+ < 1,
0% ./4 5N I/1(
.) 1 (
7! % )(
) ()5 J
% .1(
:
:1(
) .1(
:
)% .0 ?@ 1,
. ; .12G##2##1(
:
:A
Wywołanie 0 wewnątrz 1% powoduje zablokowanie wątku. Po wciśnięciu przy-
cisku referencja $% jest ustawiana na , a zatem odśmiecacz pamięci ją sprzątnie i zostaje
wywołana metoda tego obiektu. Przy pierwszym wciśnięciu przycisku wątek zostanie
zakończony, ale po tym nie będzie już żadnego wątku do zabicia.
Metody i mogą łatwo spowodować impas. Po wywołaniu wątek
zostanie zatrzymany, ale ciągle będzie przetrzymywał jakieś blokady, które nabył do tej pory. Tak
więc żaden inny wątek nie może dostać się do zamkniętych zasobów, dopóki zawieszony wątek

Tematy

Drogi użytkowniku!

W trosce o komfort korzystania z naszego serwisu chcemy dostarczać Ci coraz lepsze usługi. By móc to robić prosimy, abyś wyraził zgodę na dopasowanie treści marketingowych do Twoich zachowań w serwisie. Zgoda ta pozwoli nam częściowo finansować rozwój świadczonych usług.

Pamiętaj, że dbamy o Twoją prywatność. Nie zwiększamy zakresu naszych uprawnień bez Twojej zgody. Zadbamy również o bezpieczeństwo Twoich danych. Wyrażoną zgodę możesz cofnąć w każdej chwili.

 Tak, zgadzam się na nadanie mi "cookie" i korzystanie z danych przez Administratora Serwisu i jego partnerów w celu dopasowania treści do moich potrzeb. Przeczytałem(am) Politykę prywatności. Rozumiem ją i akceptuję.

 Tak, zgadzam się na przetwarzanie moich danych osobowych przez Administratora Serwisu i jego partnerów w celu personalizowania wyświetlanych mi reklam i dostosowania do mnie prezentowanych treści marketingowych. Przeczytałem(am) Politykę prywatności. Rozumiem ją i akceptuję.

Wyrażenie powyższych zgód jest dobrowolne i możesz je w dowolnym momencie wycofać poprzez opcję: "Twoje zgody", dostępnej w prawym, dolnym rogu strony lub poprzez usunięcie "cookies" w swojej przeglądarce dla powyżej strony, z tym, że wycofanie zgody nie będzie miało wpływu na zgodność z prawem przetwarzania na podstawie zgody, przed jej wycofaniem.