-
Obýektiň ähli ýagdaýlary nähili
Thread
?- T NEWZE
- AÇYLMAK
- GARAŞAN
- Garaşmak
- TIMED_WAITING
- TERMINAT
-
Blok girende haýsy ştatlara baryp biler
synchronized
?- AÇYLMAK
- GARAŞAN
RUNNABLE-de, bellenen kod bloky
synchronized
başga bir sapak bilen meşgullanmasa. Otherwiseogsam, sapagymyz GARAŞAN ýagdaýy alar we mutex obýektiniň çykmagyna garaşar. - Usuly çagyranda sapak haýsy ýagdaýa barar
wait()
?Bu usula jaň etmek sapagy garaşmak ýagdaýynda goýýar.
Usuly diňe häzirki sapak bilen “gulplanan” muteeks obýektindäkiwait()
blokyň içinde atlandyryp bolar , ýogsam bu usul “ IllegalMonitorStateException” kadasyny taşlar .synchronized
Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
Haçan-da bir usul diýlendewait()
, häzirki sapak gulpy obýektden çykarýar we usulyň başga bir sapak bilenmonitor
çagyrylmagyna garaşyp, garaşmak ýagdaýyna girýär . Bu waka ýüze çykan badyna sapak oýanar we monitor işli däl bolsa, ony tutar we işlemegini dowam etdirer. Monitor başga bir sapak bilen meşgullanýan bolsa, häzirki sapak GARAŞAN ýagdaýa geçer.monitor.notify()
monitor.notifyAll()
-
Usuly çagyranda sapak haýsy ýagdaýa barar
Bu usula jaň etmek, sapagy TIMED_WAITING ýagdaýynda goýýar.wait(500)
?
Usul bilen meňzeşlik bilenwait()
, diňe häzirki sapak bilen “gulplanan” (gulplanan) muteeks obýektindäkiwait(timeout)
blokyň içinde atlandyrylyp bilner .synchronized
Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(500); … }
Usula jaň edilende
wait()
, häzirki sapak gulpy obýektden çykarýarmonitor
we 500 millisekuntda uklaýar. Obýektmonitor
başga bir sapak bilen alnyp bilner.
500 millisekuntdan soň, sapak oýanar wemonitor
işli bolmasa, ony tutar we işlemegini dowam etdirer.
Monitor başga bir sapak bilen meşgullanýan bolsa, häzirki sapak GARAŞAN ýagdaýa geçer.Usuly çagyranda sapak haýsy ýagdaýa barar
notify()
?Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
Ondan soňmonitor.wait()
, sapak garaşmak ýagdaýyna girer.notify()
Obýektdäki başga bir sapak tarapyndan çagyrylan usul,monitor
monitoryň obýekti başga bir sapak bilen ele alynmasa, sapagy garaşýan ýagdaýyndan RUNNABLE ýagdaýyna geçirer. -
Usuly çagyranda sapak haýsy ýagdaýa barar
notifyAll()
?notifyAll()
ähli sapaklar "galar". Sleepinghli "uklaýan" (garaşýan) sapaklaryň biri RUNNABLE ýagdaýyna girer, ulanylýan obýektiň monitoryny alar we işini dowam etdirer. Galanlary GARAŞAN ýagdaýda bolar. Ilkinji “oýanmak” sapagy, hemmeleriň garaşýan monitory çykaran badyna, onuň ykbaly indiki sapak bilen gaýtalanar (özbaşdak sapak bloklanan ýagdaýdan RUNNABLE ýagdaýyna geçer). "Hli" oýanan "sapaklar GARAŞAN ýagdaýdan çykýança dowam eder. -
Sinhronlaşdyrylan blokda
Olardan ikisi GARAŞAN, biri RUNNABLE ýagdaýyna girerwait()
mutex obýekti diýilýän üç sapak. Dördünji sapak jaň etse, bu sapaklar haýsy ýagdaýa bararnotifyAll()
? -
Bu nähili
Häzirki sapagy TIMED_WAITING ýagdaýyna geçirjekdigine we geçiriljekdigine garamazdan, olaryň arasynda düýpli tapawutlar bar:join(500)
tapawutlanýarwait(500)
?join(500)
bu blok sinhronlanan obýektiň üstünde sinhronlaşdyrylan blokyň içinde çagyrylýan sapak . Çagyrylanda, häzirki sapak usuly gutarmak üçin 500 millisekunt garaşar. Çagyrylanda, häzirki sapak sinhronlaşdyrylan obýektden gulpy boşadar we 500 millisekuntda uklar. 500 millisekuntdan soň, iki ýagdaýda-da sapaklar işlemegini dowam etdirer.wait(500)
join(500)
wait(500)
join(500)
join()
wait(500)
-
Bu nähili
wait(500)
tapawutlanýarsleep(500)
?sleep(500)
wait(500)
bu blokyň sinhronlanan obýektindäki sinhron blokyň içinde diýilýän sapak çagyryldy .
Çagyrylandasleep(500)
häzirki sapak 500 millisekunt garaşar, soň bolsa işini dowam etdirer.
Çagyrylanda,wait(500)
häzirki sapak sinhronlaşdyrylan obýektden gulpy boşadar we 500 millisekuntda uklar. -
Usuly çagyranda sapak haýsy ýagdaýa barar
Usul diýlendeyield()
?yield()
, häzirki sapak “öz gezeginden geçýär” we java derrew indiki sapagy ýerine ýetirýär. Threadüplük ştatarunning
geçýärready
. Işleýän we taýýar ýagdaýlar RUNNABLE ýagdaýynyň aşaky bölekleri.
GO TO FULL VERSION