26 lines
1.4 KiB
Plaintext
26 lines
1.4 KiB
Plaintext
\b;Instrukcja \c;synchronized\n; (dla specjalistów)
|
|
Metoda \l;klasy\u cbot\class; może być zadeklarowana jako \c;synchronized\n;. Dzięki temu można zapewnić, że metoda będzie uruchamiana nie więcej niż przez jednego robota w tym samym czasie.
|
|
|
|
Następujący przykład pomoże zilustrować problem:
|
|
\c;
|
|
\s;class blokowanie
|
|
\s;{
|
|
\s; static int nb = 33;
|
|
\s; synchronized int inc( )
|
|
\s; {
|
|
\s; int val = nb;
|
|
\s; wait ( 2 ); // czekaj 2 sekundy
|
|
\s; nb = nb + 1;
|
|
\s; return val;
|
|
\s; }
|
|
\s;}
|
|
\n;
|
|
Co się dzieje, gdy dwa roboty wykonają metodę \c;inc\n; w tym samym czasie¦?
|
|
Oba wykonają polecenie \c;val=nb\n; i poczekają 2 sekundy, a więc oba otrzymają \c;val=33\n;. Gdy użyjemy instrukcji \c;synchronized\n; pierwszy robot rozpocznie wykonywanie z \c;val=33\n; poczeka 2 sekundy i wyjdzie z metody. Dopiero po zakończeniu wykonywania metody \c;inc\n; przez pierwszego robota, drugi robot będzie miał możliwość wykonania metody \c;inc\n;, wobec czego otrzyma on zawsze \c;val=34\n;.
|
|
|
|
Można mieć więcej niż jedną zsynchronizowaną metodę w \l;klasie\u cbot\class; w celu zapobieżenia równoczesnemu wykonywaniu więcej niż jednej metody. Innymi słowy: tak długo, jak długo robot jest wewnątrz zsynchronizowanej metody, żaden inny robot nie może wykonywać żadnej zsynchronizowanej metody tej samej klasy.
|
|
|
|
\t;Zobacz również
|
|
\c;\l;klasa\u cbot\class;\n;, \c;\l;static\u cbot\static;\n;
|
|
\l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.
|