ΠΠ°ΠΊΠΈΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ?
Anonymous Quiz
8%
Warning ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
10%
ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
16%
ΠΡΠ΄Π΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ΠΎ "TEST " Π±Π΅Π· ΠΊΠ°Π²ΡΡΠ΅ΠΊ
35%
ΠΡΠ΄Π΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ΠΎ "TEST TEST " Π±Π΅Π· ΠΊΠ°Π²ΡΡΠ΅ΠΊ
10%
ΠΡΠ΄Π΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ΠΎ "TEST TEST TEST " Π±Π΅Π· ΠΊΠ°Π²ΡΡΠ΅ΠΊ
21%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π16π10β‘2π1
Π Π°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΎ classloader'Ρ ΠΈ ΠΈΡ
ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΡ. ΠΠ· Π·Π° ΡΠ΅Π³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ NoClassDefFoundError, NoSuchMethodError?
ΠΠ΅ΡΠ°ΡΡ ΠΈΡ classloader'ΠΎΠ²
1. Bootstrap
2. System
3. Application
β’ NoClassDefFoundError ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Ρ ΡΡΠΈΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ Π½Π΅Ρ Π² classpath
β’ NoSuchMethodError ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΈΠ·-Π·Π° Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π²Π°ΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π΅ΡΠ»ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° A Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ· ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ B, Π½ΠΎ Π² classpath Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ B, c Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΠΎΠΉ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°
ΠΠ΅ΡΠ°ΡΡ ΠΈΡ classloader'ΠΎΠ²
1. Bootstrap
2. System
3. Application
β’ NoClassDefFoundError ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Ρ ΡΡΠΈΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ Π½Π΅Ρ Π² classpath
β’ NoSuchMethodError ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΈΠ·-Π·Π° Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π²Π°ΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π΅ΡΠ»ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° A Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ· ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ B, Π½ΠΎ Π² classpath Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ B, c Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΠΎΠΉ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°
β‘18π8π€©2π1
ΠΠ°ΠΊΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ?
Anonymous Quiz
47%
ΠΠ΄Π΅ΠΌ Π³ΡΠ»ΡΡΡ Π² ΠΏΠ°ΡΠΊ
27%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΠΊΠ»Π°ΡΡΠ΅ Okey Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ go()
16%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ Π
3%
ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
7%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΠΊΠ»Π°ΡΡΠ΅ Okey Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ stop()
π15
synchronized. wait/notify/notifyAll. ΠΠ°ΠΊ Π΅ΡΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° j.u.c?
ΠΠ°Π»ΡΡΠ΅ ΡΠ΅Π·ΠΈΡΡ:
β’ synchronized β ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠ΅Π΅ ΡΠΊΠΎΡΠΏ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. ΠΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²ΠΈΡΡ Π½Π°ΠΏΡΠΎΡΠΈΠ² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ Π±Π»ΠΎΠΊΠ° Π² ΠΊΠΎΠ΄Π΅.
β’ wait() β ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΡΠ΅Π΄Π° Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π±ΡΠΆΠ΅Π½ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠ΅Π΄ΠΎΠΌ ΡΠ΅ΡΠ΅Π· notify/notifyAll.
β’ Π£ wait() Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Ρ ΡΠ°ΠΉΠΌΠ°ΡΡΠ°ΠΌΠΈ.
β’ Π’ΡΠ΅Π΄ ΡΡΠ°Π²ΠΈΡΡΡ Π² wait-set Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅
β’ ΠΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ wait() Π½ΡΠΆΠ½ΠΎ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ (ΡΠ΅ΡΠ΅Π· synchronized)
β’ ΠΠ°Π³ΠΈΡ wait() β ΠΎΠ½ ΠΎΡΠΏΡΡΠΊΠ°Π΅Ρ Π»ΠΎΠΊ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π°, ΡΠ°ΠΊ ΡΡΠΎΠ±Ρ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ΅Π΄ ΠΌΠΎΠ³ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ Π²ΡΠ·Π²Π°ΡΡ notify/notifyAll
β’ notify() β Π±ΡΠ΄ΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΡΡΠ΅Π΄ΠΎΠ², Π½ΠΎ ΠΠ°ΠΆΠ½ΠΎ! β Π»ΠΎΠΊ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π½Π΅ ΠΎΡΠΏΡΡΠΊΠ°Π΅Ρ, Ρ.Π΅ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΡΡΠ΅Π΄ ΡΠ°Π·Π±ΡΠΆΠ΅Π½ Π±ΡΠ΄Π΅Ρ, Π½ΠΎ Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ Π²Ρ ΠΎΠ΄Π° Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Ρ.ΠΊ ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ Π½Π° synchronized). Π’Π°ΠΊ ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ notify Π΅ΡΡΡ ΡΡΠΆΠ΅Π»ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΡΠΎ Π·Π°ΡΠΎΡΠΌΠΎΠ·ΠΈΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΡΡΠ΅Π΄, Ρ.ΠΊ ΡΡΠ΅Π΄ Ρ notify Π΅ΡΠ΅ Π½Π΅ ΠΎΡΠΏΡΡΡΠΈΠ» ΠΌΠΎΠ½ΠΈΡΠΎΡ
β’ notifyAll() β Π±ΡΠ΄ΡΡ ΡΠ°Π·Π±ΡΠΆΠ΅Π½Ρ Π²ΡΠ΅ ΡΡΠ΅Π΄Ρ Π² wait-set, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π΄Π°Π»Π΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅Π΄Π°ΠΌΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ contention (Β«ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅Β») Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡ
β’ Π’ΡΠ΅Π΄ Π½Π° wait() ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π±ΡΠΆΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΠ΅Π· interrupt, ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· spurious wake-up, ΠΈΠ»ΠΈ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ°ΡΡΡ
β’ Π’Π°ΠΊ ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΡΠ΅Π΄, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π² ΡΠΈΠΊΠ»Π΅ while, Π° Π½Π΅ Π² if
β’ ΠΡΠΈΠΌΠΈΡΠΈΠ²-Π°Π½Π°Π»ΠΎΠ³ β Condition
ΠΠ°Π»ΡΡΠ΅ ΡΠ΅Π·ΠΈΡΡ:
β’ synchronized β ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠ΅Π΅ ΡΠΊΠΎΡΠΏ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. ΠΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²ΠΈΡΡ Π½Π°ΠΏΡΠΎΡΠΈΠ² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ Π±Π»ΠΎΠΊΠ° Π² ΠΊΠΎΠ΄Π΅.
β’ wait() β ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΡΠ΅Π΄Π° Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π±ΡΠΆΠ΅Π½ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠ΅Π΄ΠΎΠΌ ΡΠ΅ΡΠ΅Π· notify/notifyAll.
β’ Π£ wait() Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Ρ ΡΠ°ΠΉΠΌΠ°ΡΡΠ°ΠΌΠΈ.
β’ Π’ΡΠ΅Π΄ ΡΡΠ°Π²ΠΈΡΡΡ Π² wait-set Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅
β’ ΠΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ wait() Π½ΡΠΆΠ½ΠΎ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ (ΡΠ΅ΡΠ΅Π· synchronized)
β’ ΠΠ°Π³ΠΈΡ wait() β ΠΎΠ½ ΠΎΡΠΏΡΡΠΊΠ°Π΅Ρ Π»ΠΎΠΊ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π°, ΡΠ°ΠΊ ΡΡΠΎΠ±Ρ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ΅Π΄ ΠΌΠΎΠ³ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ Π²ΡΠ·Π²Π°ΡΡ notify/notifyAll
β’ notify() β Π±ΡΠ΄ΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΡΡΠ΅Π΄ΠΎΠ², Π½ΠΎ ΠΠ°ΠΆΠ½ΠΎ! β Π»ΠΎΠΊ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π½Π΅ ΠΎΡΠΏΡΡΠΊΠ°Π΅Ρ, Ρ.Π΅ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΡΡΠ΅Π΄ ΡΠ°Π·Π±ΡΠΆΠ΅Π½ Π±ΡΠ΄Π΅Ρ, Π½ΠΎ Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ Π²Ρ ΠΎΠ΄Π° Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Ρ.ΠΊ ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ Π½Π° synchronized). Π’Π°ΠΊ ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ notify Π΅ΡΡΡ ΡΡΠΆΠ΅Π»ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΡΠΎ Π·Π°ΡΠΎΡΠΌΠΎΠ·ΠΈΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΡΡΠ΅Π΄, Ρ.ΠΊ ΡΡΠ΅Π΄ Ρ notify Π΅ΡΠ΅ Π½Π΅ ΠΎΡΠΏΡΡΡΠΈΠ» ΠΌΠΎΠ½ΠΈΡΠΎΡ
β’ notifyAll() β Π±ΡΠ΄ΡΡ ΡΠ°Π·Π±ΡΠΆΠ΅Π½Ρ Π²ΡΠ΅ ΡΡΠ΅Π΄Ρ Π² wait-set, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π΄Π°Π»Π΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅Π΄Π°ΠΌΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ contention (Β«ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅Β») Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡ
β’ Π’ΡΠ΅Π΄ Π½Π° wait() ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π±ΡΠΆΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΠ΅Π· interrupt, ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· spurious wake-up, ΠΈΠ»ΠΈ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ°ΡΡΡ
β’ Π’Π°ΠΊ ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΡΠ΅Π΄, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π² ΡΠΈΠΊΠ»Π΅ while, Π° Π½Π΅ Π² if
β’ ΠΡΠΈΠΌΠΈΡΠΈΠ²-Π°Π½Π°Π»ΠΎΠ³ β Condition
π17π₯5
Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
28%
c
29%
a b c
9%
c b a
34%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π21
volatile. happens-before.
β’ ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ volatile ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ happens-before Π½Π°Π΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ Π·Π°ΠΏΠΈΡΠΈ-ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠΎΠ»Π΅
β’ Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠΈΡΠ°ΡΡΠΈΡ ΡΡΠ΅Π΄ΠΎΠ² Π±ΡΠ΄ΡΡ Π²ΠΈΠ΄Π΅ΡΡ ΡΡΡΠ΅ΠΊΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΈΡΡΡΠΈΡ ΡΡΠ΅Π΄ΠΎΠ².
β’ Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° double checked locking. ΠΠ»Ρ double/long ΡΠΈΠΏΠΎΠ² Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΎΠ½Π° ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π°ΡΠΎΠΌΠΈΠΊΠΈ
β’ ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ volatile ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ happens-before Π½Π°Π΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ Π·Π°ΠΏΠΈΡΠΈ-ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠΎΠ»Π΅
β’ Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠΈΡΠ°ΡΡΠΈΡ ΡΡΠ΅Π΄ΠΎΠ² Π±ΡΠ΄ΡΡ Π²ΠΈΠ΄Π΅ΡΡ ΡΡΡΠ΅ΠΊΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΈΡΡΡΠΈΡ ΡΡΠ΅Π΄ΠΎΠ².
β’ Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° double checked locking. ΠΠ»Ρ double/long ΡΠΈΠΏΠΎΠ² Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΎΠ½Π° ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π°ΡΠΎΠΌΠΈΠΊΠΈ
π18π₯3β‘1
Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
9%
int
36%
Object
32%
Integer
23%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π24π³6π₯4π1
ΠΠ°ΠΊ ΠΏΠΎΠΉΠΌΠ°ΡΡ exception ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΡΠ΅Π΄Π°?
ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Thread.UncaughExceptionHandler
ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Thread.UncaughExceptionHandler
π28β‘5π₯3
Π§ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ?
Anonymous Quiz
41%
123456
14%
1234567
31%
012345
14%
0123456
π32β€βπ₯2π2
AtomicInteger, AtomicLong, AtomicBoolean, AtomicDouble
β’ ΠΡΠΎΠΌΠΈΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ Π±Π΅Π· ΡΡΡΠ΅ΠΊΡΠ° Π³ΠΎΠ½ΠΎΠΊ.
β’ ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 10 ΡΡΠ΅Π΄ΠΎΠ² ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΡΡ AtomicInt = 0, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄ ΠΆΠ΄Π΅Ρ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· countdown-latch, Π΄Π°Π»Π΅Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π°ΡΠΎΠΌΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠΊΠ°Π·Π°ΡΡ 10.
β’ ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ Π°ΡΠΎΠΌΠΈΠΊΠΎΠ² β ΡΠΈΠΊΠ» cas (compare-and-set). ΠΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ increment:
1. Π§ΠΈΡΠ°Π΅ΠΌ ΡΡΠ°ΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
2. ΠΠ΅ΡΠ΅Π΄ set'ΠΎΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΡΠ°ΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ, ΡΠ΅ΡΠ°Π΅ΠΌ ΡΡΠ°ΡΠΎΠ΅ + 1
3. ΠΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ, Π² ΡΠ»Π΅Π΄. ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Β«Π½ΠΎΠ²ΠΎΠ΅Β» ΡΡΠ°ΡΠΎΠ΅, Π΄Π°Π»Π΅Π΅ ΡΠΌ. ΠΏ. 1
β’ ΠΡΠΎΠΌΠΈΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ Π±Π΅Π· ΡΡΡΠ΅ΠΊΡΠ° Π³ΠΎΠ½ΠΎΠΊ.
β’ ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 10 ΡΡΠ΅Π΄ΠΎΠ² ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΡΡ AtomicInt = 0, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄ ΠΆΠ΄Π΅Ρ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· countdown-latch, Π΄Π°Π»Π΅Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π°ΡΠΎΠΌΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠΊΠ°Π·Π°ΡΡ 10.
β’ ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ Π°ΡΠΎΠΌΠΈΠΊΠΎΠ² β ΡΠΈΠΊΠ» cas (compare-and-set). ΠΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ increment:
1. Π§ΠΈΡΠ°Π΅ΠΌ ΡΡΠ°ΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
2. ΠΠ΅ΡΠ΅Π΄ set'ΠΎΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΡΠ°ΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ, ΡΠ΅ΡΠ°Π΅ΠΌ ΡΡΠ°ΡΠΎΠ΅ + 1
3. ΠΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ, Π² ΡΠ»Π΅Π΄. ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Β«Π½ΠΎΠ²ΠΎΠ΅Β» ΡΡΠ°ΡΠΎΠ΅, Π΄Π°Π»Π΅Π΅ ΡΠΌ. ΠΏ. 1
π26β‘5π₯1
Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ?
Anonymous Quiz
5%
current version: 0.1a
66%
current version: 0.5b
8%
current version: 0.1a current version: 0.5b
21%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π23π₯4
ReentrantLock
ΠΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π³ΡΠ°Π½ΠΈΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. Π’ΡΠ΅Π΄, ΠΏΠ΅ΡΠ΅Π΄ Π²Ρ ΠΎΠ΄ΠΎΠΌ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°ΡΡ Π·Π°Ρ Π²Π°Ρ c ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ lock(), ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΊΡΠΈΡ. ΡΠ΅ΠΊΡΠΈΠΈ β ΡΠ΄Π΅Π»Π°ΡΡ unlock(). ΠΡΡΠ³ΠΎΠΉ ΡΡΠ΅Π΄ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π½Π° lock'Π΅ (ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ°ΠΉΠΌΠ°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ), Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ΅Π· tryLock().
ReentrantLock ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ (ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ ΡΠ°Π·, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΎΠ½ Π±ΡΠ» Π·Π°Ρ Π²Π°ΡΠ΅Π½), Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ thread starvation Ρ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ΅Π΄ΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ Ρ Π³ΡΠ°Π½ΠΈΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ.
ReentrantLock ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Β«ΡΠ΅ΡΡΠ½ΡΠΌΒ» (fairness = true), ΡΠΎΠ³Π΄Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΎΡΠ΄Π°Π΅ΡΡΡ ΡΡΠ΅Π΄Π°ΠΌ, ΠΆΠ΄ΡΡΠΈΡ Π½Π° Π½Π΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»-Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΡΡΠΎ Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
ΠΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π³ΡΠ°Π½ΠΈΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. Π’ΡΠ΅Π΄, ΠΏΠ΅ΡΠ΅Π΄ Π²Ρ ΠΎΠ΄ΠΎΠΌ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°ΡΡ Π·Π°Ρ Π²Π°Ρ c ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ lock(), ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΊΡΠΈΡ. ΡΠ΅ΠΊΡΠΈΠΈ β ΡΠ΄Π΅Π»Π°ΡΡ unlock(). ΠΡΡΠ³ΠΎΠΉ ΡΡΠ΅Π΄ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π½Π° lock'Π΅ (ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ°ΠΉΠΌΠ°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ), Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ΅Π· tryLock().
ReentrantLock ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ (ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ ΡΠ°Π·, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΎΠ½ Π±ΡΠ» Π·Π°Ρ Π²Π°ΡΠ΅Π½), Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ thread starvation Ρ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ΅Π΄ΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ Ρ Π³ΡΠ°Π½ΠΈΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ.
ReentrantLock ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Β«ΡΠ΅ΡΡΠ½ΡΠΌΒ» (fairness = true), ΡΠΎΠ³Π΄Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΎΡΠ΄Π°Π΅ΡΡΡ ΡΡΠ΅Π΄Π°ΠΌ, ΠΆΠ΄ΡΡΠΈΡ Π½Π° Π½Π΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»-Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΡΡΠΎ Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
lock.lock(); // block until condition holds
try {
// ... method body
} finally {
lock.unlock()
}π20π₯2
ΠΠ°ΠΊΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ?
Anonymous Quiz
48%
1 2
1%
2 1
4%
ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
47%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π32π4
Countdown Latch/Cyclic Barrier
CountdownLatch (Β«Π·Π°ΡΠ΅Π»ΠΊΠ°Β») β ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ thread ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ N ΡΡΠ΅Π΄ΠΎΠ². Π’ΡΠ΅Π΄Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡ countDown() Π½Π° Π·Π°ΡΠ΅Π»ΠΊΠ΅, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ await(). ΠΠΎΠ³Π΄Π° ΡΡΠ΅ΡΡΠΈΠΊ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ Π½ΡΠ»Ρ, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ.
ΠΠ»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ N ΡΡΠ΅Π΄ΠΎΠ² (Π²ΡΠ΅ ΠΆΠ΄ΡΡ Π²ΡΠ΅Ρ ) ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ CyclicBarrier, Π΅ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ (ΡΠ΅ΡΠ΅Π· Runnable), Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅Ρ -ΡΠΎ-Π²ΡΠ΅ΠΌΠΈ
CountdownLatch (Β«Π·Π°ΡΠ΅Π»ΠΊΠ°Β») β ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ thread ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ N ΡΡΠ΅Π΄ΠΎΠ². Π’ΡΠ΅Π΄Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡ countDown() Π½Π° Π·Π°ΡΠ΅Π»ΠΊΠ΅, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ await(). ΠΠΎΠ³Π΄Π° ΡΡΠ΅ΡΡΠΈΠΊ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ Π½ΡΠ»Ρ, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ.
ΠΠ»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ N ΡΡΠ΅Π΄ΠΎΠ² (Π²ΡΠ΅ ΠΆΠ΄ΡΡ Π²ΡΠ΅Ρ ) ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ CyclicBarrier, Π΅ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ (ΡΠ΅ΡΠ΅Π· Runnable), Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅Ρ -ΡΠΎ-Π²ΡΠ΅ΠΌΠΈ
π16