Kuo skiriasi Java sinchronizuotos instancijos ir statinės sinchronizuotos metodai?
sobes.tech AI
Atsakymas iš AI
Java yra dviejų tipų sinchronizuotos metodai: sinchronizuotos instancijos ir statinės sinchronizuotos metodai. Pagrindinis skirtumas yra tas, kuriame objekte vyksta užrakinimas:
-
Sinchronizuotas instancijos metodas (
synchronizedbestatic): Užrakinimas vyksta objekte (this), kuriam priklauso metodas. Tai reiškia, kad jei turite keletą klasių egzempliorių, kiekvienas turi savo užraktą. -
Statinis sinchronizuotas metodas (
static synchronized): Užrakinimas vyksta klasės objekte —Classobjekte, kuris atstovauja pačią klasę. Taigi, užraktas yra bendras visiems klasės egzemplioriams.
Pavyzdys:
public class Example {
public synchronized void instanceMethod() {
// užrakina this
}
public static synchronized void staticMethod() {
// užrakina Example.class
}
}
Tai reiškia, kad du srautai negali vienu metu vykdyti to paties sinchronizuoto instancijos metodo toje pačioje objekte, tačiau gali vykdyti skirtingus sinchronizuotus metodus skirtinguose šios klasės objektuose.
Tuo pačiu metu, statinis sinchronizuotas metodas užrakina visą klasę, todėl vienu metu tik vienas srautas gali vykdyti bet kurį šios klasės statinį sinchronizuotą metodą, nepriklausomai nuo egzempliorių.