-
Anonim
problem mam nieco banalny, ale moja niepewność nie daje mi spokoju...
problem:
załóżmy, że mamy klasę z np. 5 metodami, z czego 3 są typu synchronized; we wszelkich możliwych źródłach piszą, że jak jakiś wątek dobiera się do tej jednej z metod typu synchronized no to zakładana jest blokada na obiekt omawianej klasy taka, że reszta metod typu synchronized nie może być wywołana przez żaden inny wątek w danej chwili
cyt. z Sun'a:
The system associates a unique lock with every instance of synchronized class (class with synchronized method). Whenever control enters a synchronized method, the thread that called the method locks the object whose method has been called. Other threads cannot call a synchronized method on the same object until the object is unlocked.
pytanie:
co w takim razie ze "zwykłymi metodami" - czy są blokowane tak samo jak metody synchronizowane, czy pomimo blokady "zwykłe metody" mogą być wywoływane w danej chwili przez inne wątki?
pytanie2:
czy jeżeli wątek A wywoła metodę sychronizowaną obiektu X, to czy ten sam wątek może również wywołać inną metodę synchronizowaną obiektu X w czasie kiedy nałożona jest blokada...?
"Other threads cannot call a synchronized method on the same object until the object is unlocked. " => skoro nie mogą tylko OTHER THREADS to ten jeden wątek A chyba może...przynajmniej tak z tego wynika -
Koziołek [brat Javowiec]
1. metody niesynchronizowane są dostępne. Zrób zresztą test. odpal w dwóch wątkach dwie pętle pierwsza niech wywołuje metodę synchronizowaną druga niesynchronizowaną. Popatrz co będzie się działo.
2. Blokada to para <wątek klasa> w momencie gdy wywołujesz metodę synchronizowaną MV ustawia taką parę wskaźników. Teraz zrób prosty test:
class A{
public syncronized void a(){
System.out.println("a");
b();
}
public syncronized void b(){
System.out.println("b");
}
}
z metody synchronizowanej a wywołaj metodę synchronizowaną b . -
spec
a nie jest to tak, ze metoda synchronized wywolana z zewnatrz blokuje dostep do zmiany stanu obietku innymi metodami a ztym atrybutem dopoki nie wyjdzie z niej?:)
czyli wszystko co jest ponizej tej metody w drzewie wywolan, bedzie synchronized.
i tyle, to tylko formalizm i metoda na zapanowanie nad problemami wielowatkowosci ale nadal nie zatrzyma Cie przed wolaniem dwoch odzielnych watkach zwyklych metod na rzecz tego samego obietku:P
nie wiem nie pisze w Javie ale mam prawo tak myslec.
najlepiej nie miec stanow wogole(zmiennych mutuable), problem znika z definicji:D
-
Koziołek [brat Javowiec]
>spec napisał
>najlepiej nie miec stanow wogole(zmiennych mutuable),
>problem znika z definicji:D
>
Nie zawsze się tak da :)
Niektóre rzeczy powinny być blokowane. np dostęp do rekordu w bazie danych czy dostęp do pliku :)
-
-
spec
wiesz, w sumie to nie jestem za czysto funckjonalnym horrorem:P
generalnie input-output emulowany podejsciem czysto funckjoanlnym bez zadnych stanow miedzy wywolaniami i efektami ubocznymi, wiec bez juz roznic w jakiej kolejnosci zostana wywalene funckje to juz hardcore.
wiki->haskell->monads.
nie sprawdza to sie w premysle napewno, e - commerce wogole.
no ale co do tematu to synchronizacja dalej to cos co siedzi nie tylko w dostepie do pamieci w VM zwrapowanej w niej w obietky javy, ale tez jak mowisz wszystko, pliki, bazy, caly input output (funckja flush nawet jest prymitwnym przykladem synchronizacji, commit w svnie tyz)
a program powinen wykonwyac operacje tylko na inpucie i zwracac output nic wiecej, wiec imho nie potrzebne mi takie skomplikowane rzeczy jak obiekty wiecej bo same w sobie zawieraja stany.
stan powinen siedziec, program powinen je zmieniac w konetekcie innych stanow.
w javie to osiagnieto po czesci (ale nie bedzie nigdy osiagniete ze wzgl na paradygmat, dodatkwo dalej mozna produkowac "dziwny" kod w javie)
przez to ze wszystko jest spiete referencja i nie ma kopiowania jak w C++, wiec dalej stany ale juz szerowane.
ale nie mozna inaczej jesli kod mialby byc czytelny rowniez dla innych oprocz autora, ale fuk dem! nie?; ] no ja mysle.
- Przeglądaj grona w kategorii Internet i Komputery
- Przeglądaj grona w okolicy Warszawa
- Załóż własne grono tematyczne
- Zostań moderatorem
Podobne Tematy
|
|
Wszystko co związane z programowaniem w Java (J2EE, JSP, JDBC, itd) test
Miejsca grona (1)
-
Kino Luna ul. Marszałkowska, Warszawa
www.kinoluna.pl kino.luna@maxfilm.com.pl 22 621 78 28
- Dodaj miejsce

