ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ±ΠΈΡΠ°ΡΡ ReentrantLock Π²ΠΌΠ΅ΡΡΠΎ synchronized?
ΠΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° ReentrantLock ΡΠ΅ΡΠ°Π΅Ρ ΡΠ΅ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠΎ ΠΈ Π±Π»ΠΎΠΊ synchronized. ΠΠΎΡΠΎΠΊ Π²ΠΈΡΠΈΡ Π½Π° Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° lock() Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π·Π°Π½ΡΡΡ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ»Π°Π΄Π΅ΡΡ Π»ΠΎΠΊΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° synchronized ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. unlock(), ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π²ΡΡ ΠΎΠ΄Ρ ΠΈΠ· Π±Π»ΠΎΠΊΠ° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΌΠΎΠ½ΠΈΡΠΎΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π±Π»ΠΎΠΊΠ° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ReentrantLock Π΄Π°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ΅ΡΠΎΠ΄Ρ Π»ΠΎΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΅ΡΠ΅ Π΄ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ·Π½Π°ΡΡ, Π·Π°Π½ΡΡ Π»ΠΈ ΠΎΠ½ ΡΠ΅ΠΉΡΠ°Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΆΠ΄ΡΡ Π΅Π³ΠΎ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΏΠΎΠ΄ΡΡΠ΄ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°Π²Π»Π°Π΄Π΅Π» ΠΈΠΌ.
Π¨ΠΈΡΠ΅ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠΎΠΌΠ΅ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡΠ΅Π³ΠΎ lock(), Π²Π°ΡΠΈΠ°Π½Ρ tryLock() Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠ²ΠΎΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π° Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° β Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΆΠ΄Π΅Ρ, Π° ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ Π»ΠΎΠΊ.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΎ ΠΎΡΠ»ΠΈΡΠΈΠ΅ β ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ fair. ΠΠΎΠΊ Ρ ΡΡΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Β«ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎΡΡΡΒ» ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ: ΠΏΡΠΈΡΠ΅Π΄ΡΠΈΠΉ ΡΠ°Π½ΡΡΠ΅ ΠΏΠΎΡΠΎΠΊ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°Π½ΡΡΠ΅. ΠΠ»ΠΎΠΊ synchronized Π½Π΅ Π΄Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π³Π°ΡΠ°Π½ΡΠΈΠΉ ΠΏΠΎΡΡΠ΄ΠΊΠ°.
Java Guruπ€ #java
ΠΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° ReentrantLock ΡΠ΅ΡΠ°Π΅Ρ ΡΠ΅ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠΎ ΠΈ Π±Π»ΠΎΠΊ synchronized. ΠΠΎΡΠΎΠΊ Π²ΠΈΡΠΈΡ Π½Π° Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° lock() Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π·Π°Π½ΡΡΡ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ»Π°Π΄Π΅ΡΡ Π»ΠΎΠΊΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° synchronized ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. unlock(), ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π²ΡΡ ΠΎΠ΄Ρ ΠΈΠ· Π±Π»ΠΎΠΊΠ° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΌΠΎΠ½ΠΈΡΠΎΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π±Π»ΠΎΠΊΠ° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ReentrantLock Π΄Π°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ΅ΡΠΎΠ΄Ρ Π»ΠΎΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΅ΡΠ΅ Π΄ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ·Π½Π°ΡΡ, Π·Π°Π½ΡΡ Π»ΠΈ ΠΎΠ½ ΡΠ΅ΠΉΡΠ°Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΆΠ΄ΡΡ Π΅Π³ΠΎ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΏΠΎΠ΄ΡΡΠ΄ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°Π²Π»Π°Π΄Π΅Π» ΠΈΠΌ.
Π¨ΠΈΡΠ΅ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠΎΠΌΠ΅ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡΠ΅Π³ΠΎ lock(), Π²Π°ΡΠΈΠ°Π½Ρ tryLock() Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠ²ΠΎΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π° Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° β Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΆΠ΄Π΅Ρ, Π° ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ Π»ΠΎΠΊ.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΎ ΠΎΡΠ»ΠΈΡΠΈΠ΅ β ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ fair. ΠΠΎΠΊ Ρ ΡΡΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Β«ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎΡΡΡΒ» ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ: ΠΏΡΠΈΡΠ΅Π΄ΡΠΈΠΉ ΡΠ°Π½ΡΡΠ΅ ΠΏΠΎΡΠΎΠΊ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°Π½ΡΡΠ΅. ΠΠ»ΠΎΠΊ synchronized Π½Π΅ Π΄Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π³Π°ΡΠ°Π½ΡΠΈΠΉ ΠΏΠΎΡΡΠ΄ΠΊΠ°.
Java Guruπ€ #java
π13π₯6β€2
1π10π₯3
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Lock.newCondition()?
ΠΡΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Lock ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π±Π»ΠΎΠΊΠ° synchronized, ΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅Π³ΠΎ ΡΠΏΡΡΠ½ΠΈΠΊΠ°, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Condition β Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ notify/wait. ΠΠ±Π° ΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΏΠ°ΠΊΠ΅ΡΡ java.util.concurrent.locks.
ΠΠ°ΠΊ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅, Condition ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Β«Π£ΡΠ»ΠΎΠ²Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°ΡΒ». ΠΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π·Π°Π²ΠΈΡΠ°ΡΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅-ΠΊΠΎΠ½Π΄ΠΈΡΠ½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° await (ΠΆΠ΄ΡΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡ). ΠΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π°Π΅Ρ ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ signal ΠΈ signalAll (ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎΠ± ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ).
ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Condition Π²ΡΠ΅Π³Π΄Π° ΡΠ΅ΡΠ°ΡΡ ΡΠ΅ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅, Π½ΠΎ Π² ΡΠ΅ΠΎΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² Π½ΡΠ°Π½ΡΠ°Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π±ΡΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅/ΡΠΈΠ³Π½Π°Π» ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΠΎΠΌ Π»ΠΎΠΊΠ΅ (Π°Π½Π°Π»ΠΎΠ³ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ notify/wait Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² synchronized). ΠΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π° ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ, Condition Π²ΡΠ΅Π³Π΄Π° ΡΠ²ΡΠ·Π°Π½ ΡΠΎ ΡΠ²ΠΎΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΠΈΠΏΠ° Lock, ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Lock.newCondition() β Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ½Π΄ΠΈΡΠ½Π°.
Java Guruπ€ #java
ΠΡΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Lock ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π±Π»ΠΎΠΊΠ° synchronized, ΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅Π³ΠΎ ΡΠΏΡΡΠ½ΠΈΠΊΠ°, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Condition β Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ notify/wait. ΠΠ±Π° ΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΏΠ°ΠΊΠ΅ΡΡ java.util.concurrent.locks.
ΠΠ°ΠΊ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅, Condition ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Β«Π£ΡΠ»ΠΎΠ²Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°ΡΒ». ΠΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π·Π°Π²ΠΈΡΠ°ΡΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅-ΠΊΠΎΠ½Π΄ΠΈΡΠ½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° await (ΠΆΠ΄ΡΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡ). ΠΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π°Π΅Ρ ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ signal ΠΈ signalAll (ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎΠ± ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ).
ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Condition Π²ΡΠ΅Π³Π΄Π° ΡΠ΅ΡΠ°ΡΡ ΡΠ΅ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅, Π½ΠΎ Π² ΡΠ΅ΠΎΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² Π½ΡΠ°Π½ΡΠ°Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π±ΡΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅/ΡΠΈΠ³Π½Π°Π» ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΠΎΠΌ Π»ΠΎΠΊΠ΅ (Π°Π½Π°Π»ΠΎΠ³ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ notify/wait Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² synchronized). ΠΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π° ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ, Condition Π²ΡΠ΅Π³Π΄Π° ΡΠ²ΡΠ·Π°Π½ ΡΠΎ ΡΠ²ΠΎΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΠΈΠΏΠ° Lock, ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Lock.newCondition() β Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ½Π΄ΠΈΡΠ½Π°.
Java Guruπ€ #java
π4β€2π₯2
Π§Π΅ΠΌ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ReentrantLock ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Lock?
Lock β ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ReentrantLock β Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. Β«ReentrantΒ» Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΡΠΆΠ΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΡΠΉ Π»ΠΎΠΊ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°. ΠΠ±ΡΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ synchronized ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ reentrant β Π²Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΡΠΈΠΌΠ΅ΡΡ Π½Π΅-reentrant Π»ΠΎΠΊΠΎΠ² ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° StampedLock, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ asReadLock() ΠΈ asWriteLock().
Java Guruπ€ #java
Lock β ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ReentrantLock β Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. Β«ReentrantΒ» Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΡΠΆΠ΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΡΠΉ Π»ΠΎΠΊ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°. ΠΠ±ΡΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ synchronized ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ reentrant β Π²Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΡΠΈΠΌΠ΅ΡΡ Π½Π΅-reentrant Π»ΠΎΠΊΠΎΠ² ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° StampedLock, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ asReadLock() ΠΈ asWriteLock().
Java Guruπ€ #java
π₯6π2
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ReadWriteLock?
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ReadWriteLock ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π° Π·Π°ΠΏΠΈΡΡ. ΠΠ»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ Π² Π½ΡΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π°: readLock() ΠΈ writeLock(). ΠΠ½ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Lock.
ΠΠ±Π° ΡΠΈΠΏΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ReadWriteLock ΡΠ²ΡΠ·Π°Π½Ρ. ΠΠΎΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π·Π°Π±Π΅ΡΠ΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° Π·Π°ΠΏΠΈΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡΡ ΡΠΈΡΠ°ΡΡ Π½Π΅ ΠΌΠ΅ΡΠ°Ρ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ readLock Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ Β«ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π½ΠΈΡΒ» Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ Β«ΡΠ΅ΡΡΡΡΠ°Β». Π ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΊΠΎΠ΄Π° writeLock ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ΡΡΡΡΠ°.
Π‘Π²ΠΎΠΉΡΡΠ²Π° ΡΡΠΈΡ Π»ΠΎΠΊΠΎΠ² Π·Π°ΡΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΡΠ΅ΡΡΡΡΠ° ΠΈ ΡΡΠ΅Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΠΈΡΠΈ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ copy-on-write ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌ, ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΡΠ³ΠΎΠ΄Π½ΡΠΌ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΡΡΡ ΡΠΈΡΠ°ΡΡ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ°ΡΠ΅ ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡΡ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ ReentrantReadWriteLock, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΠΎΠ±ΡΡΠ½ΡΠΉ ReentrantLock.
Java Guruπ€ #java
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ReadWriteLock ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π° Π·Π°ΠΏΠΈΡΡ. ΠΠ»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ Π² Π½ΡΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π°: readLock() ΠΈ writeLock(). ΠΠ½ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Lock.
ΠΠ±Π° ΡΠΈΠΏΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ReadWriteLock ΡΠ²ΡΠ·Π°Π½Ρ. ΠΠΎΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π·Π°Π±Π΅ΡΠ΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° Π·Π°ΠΏΠΈΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡΡ ΡΠΈΡΠ°ΡΡ Π½Π΅ ΠΌΠ΅ΡΠ°Ρ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ readLock Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ Β«ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π½ΠΈΡΒ» Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ Β«ΡΠ΅ΡΡΡΡΠ°Β». Π ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΊΠΎΠ΄Π° writeLock ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ΡΡΡΡΠ°.
Π‘Π²ΠΎΠΉΡΡΠ²Π° ΡΡΠΈΡ Π»ΠΎΠΊΠΎΠ² Π·Π°ΡΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΡΠ΅ΡΡΡΡΠ° ΠΈ ΡΡΠ΅Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΠΈΡΠΈ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ copy-on-write ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌ, ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΡΠ³ΠΎΠ΄Π½ΡΠΌ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΡΡΡ ΡΠΈΡΠ°ΡΡ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ°ΡΠ΅ ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡΡ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ ReentrantReadWriteLock, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΠΎΠ±ΡΡΠ½ΡΠΉ ReentrantLock.
Java Guruπ€ #java
π6π₯4β€2
π 17 ΠΈΡΠ»Ρ Π² 20:00 ΠΠ‘Π
π ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΠΎ. Π£ΡΠΎΠΊ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠ°ΡΡΠ° ΠΊΡΡΡΠ° Β«Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΒ».
ΠΡΠΈΠ±ΠΊΠΈ Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°Ρ Π»ΠΎΠΌΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Ρ ΡΠ΅ΠΊΡΡ Π² Β«Π°Π±ΡΠ°ΠΊΠ°Π΄Π°Π±ΡΡΒ». ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΎΠΊ β must-have Π½Π°Π²ΡΠΊ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ.
Π ΡΡΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ:
ΠΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ:
ΠΠ°ΡΠΈΠ½Π°ΡΡΠΈΠΌ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠ°ΠΌ, ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΠΈΠΌΡΡ Ρ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ.
π Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ: https://vk.cc/cNHZFM
Π Π΅ΠΊΠ»Π°ΠΌΠ°. ΠΠΠ Β«ΠΡΡΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠΠΠ Π 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
π4β€2π₯2
ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ StampedLock?
StampedLock β ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΉ Π² Java Ρ Π²Π΅ΡΡΠΈΠΈ 8. ΠΠ±ΡΠΈΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ ReadWriteLock: Π·Π°Ρ Π²Π°Ρ Π½Π΅ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (Π½Π° ΡΡΠ΅Π½ΠΈΠ΅), ΠΈ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΠΉ (Π½Π° Π·Π°ΠΏΠΈΡΡ). ΠΠΎ Π΅ΡΡΡ Ρ ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΡΠ΄ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ Π² Π΄Π΅ΡΠ°Π»ΡΡ .
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π΅ΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ReadWriteLock Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° Lock, ΡΠΎ StampedLock Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»Π° ΡΠΈΠΏΠ° long, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«ΡΡΠ°ΠΌΠΏΠ°ΠΌΠΈΒ». Π¨ΡΠ°ΠΌΠΏ ΡΠ»ΡΠΆΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ Π»ΠΎΠΊΠ°, ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π² ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ°Π½Π΅Π΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ. Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΡΠ°ΠΌΠΏ 0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π΅ΡΠ΄Π°Π²ΡΠΈΠΉΡΡ Π·Π°Ρ Π²Π°Ρ.
StampedLock Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ReentrantReadWriteLock β Π½Π΅ ΡΠ΅Π΅Π½ΡΡΠ°Π½Ρ. ΠΡΠΎ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ Π±Γ³Π»ΡΡΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°: ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΡΠΎΠΈΡΡ Π΄Π΅Π΄Π»ΠΎΠΊ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅.
Π StampedLock ΡΠ°ΡΡΠΈΡΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ. ΠΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ try* Π½Π΅ Π²ΠΈΡΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ. ΠΠ΅ΡΠΎΠ΄Ρ tryOptimistic* ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΡΡΠΈΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΠ΅ΡΠΎΠ΄Ρ tryConvert* Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Β«ΡΡΠΎΠ²Π΅Π½ΡΒ» Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ readLock Π²ΠΎ writeLock, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
ΠΠ΅ ΡΠΌΠΎΡΡΡ Π½Π° ΠΏΠΎΡ ΠΎΠΆΠ΅ΡΡΡ, StampedLock Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ ReadWriteLock. ΠΠΎ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π² Π½ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ-Π°Π΄Π°ΠΏΡΠ΅ΡΡ asReadWriteLock, asReadLock ΠΈ asWriteLock.
ΠΡΠΎΠ³ΠΎ, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΡΡΠ°ΠΌΠΏΠ°Ρ ΡΠ΅ΡΠ°Π΅Ρ ΡΠ΅ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠΎ ReadWriteLock, Π½ΠΎ Π΄Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Π»ΡΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
Java Guruπ€ #java
StampedLock β ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΉ Π² Java Ρ Π²Π΅ΡΡΠΈΠΈ 8. ΠΠ±ΡΠΈΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ ReadWriteLock: Π·Π°Ρ Π²Π°Ρ Π½Π΅ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (Π½Π° ΡΡΠ΅Π½ΠΈΠ΅), ΠΈ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΠΉ (Π½Π° Π·Π°ΠΏΠΈΡΡ). ΠΠΎ Π΅ΡΡΡ Ρ ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΡΠ΄ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ Π² Π΄Π΅ΡΠ°Π»ΡΡ .
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π΅ΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ReadWriteLock Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° Lock, ΡΠΎ StampedLock Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»Π° ΡΠΈΠΏΠ° long, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«ΡΡΠ°ΠΌΠΏΠ°ΠΌΠΈΒ». Π¨ΡΠ°ΠΌΠΏ ΡΠ»ΡΠΆΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ Π»ΠΎΠΊΠ°, ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π² ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ°Π½Π΅Π΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ. Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΡΠ°ΠΌΠΏ 0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π΅ΡΠ΄Π°Π²ΡΠΈΠΉΡΡ Π·Π°Ρ Π²Π°Ρ.
StampedLock Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ReentrantReadWriteLock β Π½Π΅ ΡΠ΅Π΅Π½ΡΡΠ°Π½Ρ. ΠΡΠΎ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ Π±Γ³Π»ΡΡΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°: ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΡΠΎΠΈΡΡ Π΄Π΅Π΄Π»ΠΎΠΊ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅.
Π StampedLock ΡΠ°ΡΡΠΈΡΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ. ΠΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ try* Π½Π΅ Π²ΠΈΡΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ. ΠΠ΅ΡΠΎΠ΄Ρ tryOptimistic* ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΡΡΠΈΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΠ΅ΡΠΎΠ΄Ρ tryConvert* Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Β«ΡΡΠΎΠ²Π΅Π½ΡΒ» Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ readLock Π²ΠΎ writeLock, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
ΠΠ΅ ΡΠΌΠΎΡΡΡ Π½Π° ΠΏΠΎΡ ΠΎΠΆΠ΅ΡΡΡ, StampedLock Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ ReadWriteLock. ΠΠΎ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π² Π½ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ-Π°Π΄Π°ΠΏΡΠ΅ΡΡ asReadWriteLock, asReadLock ΠΈ asWriteLock.
ΠΡΠΎΠ³ΠΎ, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΡΡΠ°ΠΌΠΏΠ°Ρ ΡΠ΅ΡΠ°Π΅Ρ ΡΠ΅ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠΎ ReadWriteLock, Π½ΠΎ Π΄Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Π»ΡΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
Java Guruπ€ #java
π7π₯6β€4
Π§Π΅ΠΌ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ CountDownLatch ΠΎΡ CyclicBarrier?
CountDownLatch, Π΄ΠΎΡΠ»ΠΎΠ²Π½ΠΎ Β«ΠΠ°ΠΏΠΎΡ Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΠΎΡΡΡΠ΅ΡΠΎΠΌΒ», β ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Java. ΠΠ½ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΈΡΠ΅Π΄ΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΠΎΠΊΠ° Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΡΠ΅ΡΡΠΈΠΊ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ Π½ΡΠ»Ρ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅, Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ await().
ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, Π·Π°ΡΠ΅ΠΌ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° 1 ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ countDown(). Π£Π·Π½Π°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ getCount(). ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΊΡΠ΄Π° ΠΈ ΠΊΠΎΠ³Π΄Π° ΡΠ³ΠΎΠ΄Π½ΠΎ.
CyclicBarrier β Π±Π°ΡΡΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ Π»ΠΎΠΌΠ°Π΅ΡΡΡ ΠΏΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠ°ΡΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ . ΠΡΠΎ ΡΠΎΠΆΠ΅ ΠΊΠ»Π°ΡΡ ΠΈΠ· Java Concurrency Framework. ΠΠΎΡΠΎΠΊ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡΠ°Π΅Ρ Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ await(). ΠΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ parties, ΠΈΡ Π»ΠΈΠΌΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ, parties Π±Π°ΡΡΠ΅ΡΠ° ΠΈ count Π»Π°ΡΡΠ° β ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅, await Π±Π°ΡΡΠ΅ΡΠ° β ΡΡΠΎ await+countDown Π»Π°ΡΡΠ°. Π Π±Π°ΡΡΠ΅ΡΠ΅ ΡΠΎΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π±Π°ΡΡΠ΅ΡΠ° (ΠΌΠ΅ΡΠΎΠ΄Ρ isBroken, getParties ΠΈ getNumberWaiting).
ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ, CyclicBarrier Π΄Π°Π΅Ρ Π΄Π²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΡΠΎΠΌΠ΅ parties ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ»Π»Π±ΡΠΊ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ²Π° Π±Π°ΡΡΠ΅ΡΠ°. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΡΡΠΎΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ: ΠΌΠ΅ΡΠΎΠ΄ reset() Π½Π°ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ Π±Π°ΡΡΠ΅Ρ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ.
ΠΠ±Π° ΡΡΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π° ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠ΅ΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ ΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π΅Π΄Π»ΠΎΠΊΠ°Ρ . ΠΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π»Π°ΡΡΠ° ΠΈ Π±Π°ΡΡΠ΅ΡΠ° β ΡΠ΅ΠΌΠ°ΡΠΎΡ. Π Π½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ ΠΏΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠΌ Π½ΡΠ»Ρ.
Java Guruπ€ #java
CountDownLatch, Π΄ΠΎΡΠ»ΠΎΠ²Π½ΠΎ Β«ΠΠ°ΠΏΠΎΡ Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΠΎΡΡΡΠ΅ΡΠΎΠΌΒ», β ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Java. ΠΠ½ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΈΡΠ΅Π΄ΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΠΎΠΊΠ° Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΡΠ΅ΡΡΠΈΠΊ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ Π½ΡΠ»Ρ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅, Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ await().
ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, Π·Π°ΡΠ΅ΠΌ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° 1 ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ countDown(). Π£Π·Π½Π°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ getCount(). ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΊΡΠ΄Π° ΠΈ ΠΊΠΎΠ³Π΄Π° ΡΠ³ΠΎΠ΄Π½ΠΎ.
CyclicBarrier β Π±Π°ΡΡΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ Π»ΠΎΠΌΠ°Π΅ΡΡΡ ΠΏΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠ°ΡΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ . ΠΡΠΎ ΡΠΎΠΆΠ΅ ΠΊΠ»Π°ΡΡ ΠΈΠ· Java Concurrency Framework. ΠΠΎΡΠΎΠΊ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡΠ°Π΅Ρ Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ await(). ΠΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ parties, ΠΈΡ Π»ΠΈΠΌΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ, parties Π±Π°ΡΡΠ΅ΡΠ° ΠΈ count Π»Π°ΡΡΠ° β ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅, await Π±Π°ΡΡΠ΅ΡΠ° β ΡΡΠΎ await+countDown Π»Π°ΡΡΠ°. Π Π±Π°ΡΡΠ΅ΡΠ΅ ΡΠΎΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π±Π°ΡΡΠ΅ΡΠ° (ΠΌΠ΅ΡΠΎΠ΄Ρ isBroken, getParties ΠΈ getNumberWaiting).
ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ, CyclicBarrier Π΄Π°Π΅Ρ Π΄Π²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΡΠΎΠΌΠ΅ parties ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ»Π»Π±ΡΠΊ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ²Π° Π±Π°ΡΡΠ΅ΡΠ°. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΡΡΠΎΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ: ΠΌΠ΅ΡΠΎΠ΄ reset() Π½Π°ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ Π±Π°ΡΡΠ΅Ρ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ.
ΠΠ±Π° ΡΡΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π° ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠ΅ΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ ΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π΅Π΄Π»ΠΎΠΊΠ°Ρ . ΠΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π»Π°ΡΡΠ° ΠΈ Π±Π°ΡΡΠ΅ΡΠ° β ΡΠ΅ΠΌΠ°ΡΠΎΡ. Π Π½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ ΠΏΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠΌ Π½ΡΠ»Ρ.
Java Guruπ€ #java
π7π₯4
ΠΠ°ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ?
Π Java ΠΏΠΎΡΠΎΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠ»Π°ΡΡΠΎΠΌ Thread. Π Π½ΡΠΌ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ stop(), Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠΌ Π½Π΅Π»ΡΠ·Ρ, ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ deprecated. Π’Π°ΠΊΠ°Ρ ΠΆΠ΅ΡΡΠΊΠ°Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ, ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π² Π½Π΅ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π°Π³, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΎ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ. Π€Π»Π°Π³ Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΈΠ·Π²Π½Π΅ ΠΏΠΎΡΠΎΠΊΠ°, Π° Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π² ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ, ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π° run(). Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ»Π°Π³Π° ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° AtomicBoolean.
ΠΠΎΠ³Π΄Π° Π² ΠΏΠΎΡΠΎΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ²ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π΅Ρ ΠΏΡΠ΅ΡΠ²Π°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ ΡΠΎΠΊΠ΅Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ. ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Thread.interrupt(). Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅ΡΠ²Π°ΡΡ Object.wait() ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ· NIO.
ΠΡΡΠ°Π½Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅. ΠΡΠ΅ΡΠ²Π°Π½Π½ΡΠΉ wait() Π²ΡΠ±ΡΠΎΡΠΈΡ InterruptedException, Selector.select() Π²Π΅ΡΠ½Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π§ΡΠΎΠ±Ρ ΠΎΡΠ»ΠΈΡΠΈΡΡ ΠΎΡΠΎΠ·Π½Π°Π½Π½ΠΎΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ Ρ ΡΠ΅Π»ΡΡ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΡΠ΅Π΄ ΠΎΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π²ΡΡ Π΅ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½Π°Π±Π΄ΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΡΠ»Π°Π³Π°.
Java Guruπ€ #java
Π Java ΠΏΠΎΡΠΎΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠ»Π°ΡΡΠΎΠΌ Thread. Π Π½ΡΠΌ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ stop(), Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠΌ Π½Π΅Π»ΡΠ·Ρ, ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ deprecated. Π’Π°ΠΊΠ°Ρ ΠΆΠ΅ΡΡΠΊΠ°Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ, ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π² Π½Π΅ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π°Π³, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΎ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ. Π€Π»Π°Π³ Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΈΠ·Π²Π½Π΅ ΠΏΠΎΡΠΎΠΊΠ°, Π° Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π² ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ, ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π° run(). Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ»Π°Π³Π° ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° AtomicBoolean.
ΠΠΎΠ³Π΄Π° Π² ΠΏΠΎΡΠΎΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ²ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π΅Ρ ΠΏΡΠ΅ΡΠ²Π°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ ΡΠΎΠΊΠ΅Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ. ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Thread.interrupt(). Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅ΡΠ²Π°ΡΡ Object.wait() ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ· NIO.
ΠΡΡΠ°Π½Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅. ΠΡΠ΅ΡΠ²Π°Π½Π½ΡΠΉ wait() Π²ΡΠ±ΡΠΎΡΠΈΡ InterruptedException, Selector.select() Π²Π΅ΡΠ½Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π§ΡΠΎΠ±Ρ ΠΎΡΠ»ΠΈΡΠΈΡΡ ΠΎΡΠΎΠ·Π½Π°Π½Π½ΠΎΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ Ρ ΡΠ΅Π»ΡΡ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΡΠ΅Π΄ ΠΎΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π²ΡΡ Π΅ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½Π°Π±Π΄ΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΡΠ»Π°Π³Π°.
Java Guruπ€ #java
π8β€4π₯4
π’ ΠΡΡ
ΠΎΠ΄ΡΡ ΠΈΠ· Jetbrains Π·Π°ΠΏΠΈΠ»ΠΈΠ»ΠΈ Π³ΠΎΠ΄Π½ΠΎΡΡ Π΄Π»Ρ Java/Kotlin-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ².
Π‘ΡΠ°ΡΡΠ°ΠΏ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ βοΈ Explyt.
ΠΠ½ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΡΠΊΠ°ΡΠΈΠ»ΠΈ ΠΌΠΎΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ·.
ΠΠΊΡΠ°ΡΡΠ΅: ΡΡΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Π² IDE, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ΅ΡΡΡ Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ:
βοΈ Vibe debugging. ΠΠ° ΡΡΠ΅Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ IDE, ΠΏΠ»Π°Π³ΠΈΠ½ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ΅ΡΡ ΠΏΠΎ ΡΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ, ΡΡΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΎΡΠ»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π° 80-90% (!)
βοΈ ΠΠ³Π΅Π½ΡΡΠΊΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ. ΠΡΡΠΈΡΡΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΆΠΈΠ²ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° ΠΏΠΎΠΊΡΡΡΠΈΠ΅ΠΌ, ΡΠ°ΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡ Π½Π΅Π·Π°ΠΊΡΡΡΡΠ΅ ΠΌΠ΅ΡΡΠ° ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ΅ΡΡΡ. Π Π°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠΎΠ½Π΅, ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
π ΠΠΎΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ - Π²ΠΎΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ΅Π»ΠΈΠ· ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°
Π‘ΡΠ°ΡΡΠ°ΠΏ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ βοΈ Explyt.
ΠΠ½ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΡΠΊΠ°ΡΠΈΠ»ΠΈ ΠΌΠΎΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ·.
ΠΠΊΡΠ°ΡΡΠ΅: ΡΡΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Π² IDE, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ΅ΡΡΡ Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ:
βοΈ Vibe debugging. ΠΠ° ΡΡΠ΅Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ IDE, ΠΏΠ»Π°Π³ΠΈΠ½ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ΅ΡΡ ΠΏΠΎ ΡΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ, ΡΡΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΎΡΠ»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π° 80-90% (!)
βοΈ ΠΠ³Π΅Π½ΡΡΠΊΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ. ΠΡΡΠΈΡΡΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΆΠΈΠ²ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° ΠΏΠΎΠΊΡΡΡΠΈΠ΅ΠΌ, ΡΠ°ΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡ Π½Π΅Π·Π°ΠΊΡΡΡΡΠ΅ ΠΌΠ΅ΡΡΠ° ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ΅ΡΡΡ. Π Π°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠΎΠ½Π΅, ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
π ΠΠΎΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ - Π²ΠΎΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ΅Π»ΠΈΠ· ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°
π6β€3π₯3
ΠΡΠΈΠ²Π΅Π΄ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ fork/join framework
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ForkJoinPool ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π·Π°Π΄Π°Ρ. ΠΡΠΎ ΡΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»ΠΈΡΡ Π½Π° ΠΏΠΎΡΡΠΈΠΈ, ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ. ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ β ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ fork, ΡΠΈΠ½Π°Π»ΡΠ½Π°Ρ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ β join.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ fork/join Π΄Π»Ρ ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΎΠ±ΡΠΈΡ ΡΠ»ΡΡΠ°Π΅Π² ΡΠΆΠ΅ Π΅ΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ ForkJoinPool Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ. ΠΠ΅ΡΠΎΠ΄ parallelSetAll ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° Arrays ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ fork/join Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°; parallelPrefix Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ; parallelSort Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.
Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π½Π΅ΡΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΡΡΠΈΠΌΠ°Ρ . Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π»ΠΎΠ³ΠΈΠΊΡ fork ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΅Π³ΠΎ ΡΠΏΠ»ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, Π° join Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
Arrays.stream(new int[]{1, 2, 3, 4}).parallel().sum();
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ΅Π»ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΡΠ°ΡΡΠ½ΡΡ Π·Π°Π΄Π°Ρ, ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΡΡΡΡΡ: Π²Π΅ΠΊΡΠΎΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠ°Π±ΠΎΡΠ° Ρ Π³ΡΠ°ΡΠ°ΠΌΠΈ, ΠΏΠΎΠΈΡΠΊ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π·Π°Π΄Π°Ρ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ RecursiveTask, RecursiveAction, ΠΈΠ»ΠΈ Spliterator.
Java Guruπ€ #java
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ForkJoinPool ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π·Π°Π΄Π°Ρ. ΠΡΠΎ ΡΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»ΠΈΡΡ Π½Π° ΠΏΠΎΡΡΠΈΠΈ, ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ. ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ β ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ fork, ΡΠΈΠ½Π°Π»ΡΠ½Π°Ρ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ β join.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ fork/join Π΄Π»Ρ ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΎΠ±ΡΠΈΡ ΡΠ»ΡΡΠ°Π΅Π² ΡΠΆΠ΅ Π΅ΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ ForkJoinPool Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ. ΠΠ΅ΡΠΎΠ΄ parallelSetAll ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° Arrays ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ fork/join Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°; parallelPrefix Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ; parallelSort Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.
Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π½Π΅ΡΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΡΡΠΈΠΌΠ°Ρ . Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π»ΠΎΠ³ΠΈΠΊΡ fork ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΅Π³ΠΎ ΡΠΏΠ»ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, Π° join Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
Arrays.stream(new int[]{1, 2, 3, 4}).parallel().sum();
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ΅Π»ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΡΠ°ΡΡΠ½ΡΡ Π·Π°Π΄Π°Ρ, ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΡΡΡΡΡ: Π²Π΅ΠΊΡΠΎΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠ°Π±ΠΎΡΠ° Ρ Π³ΡΠ°ΡΠ°ΠΌΠΈ, ΠΏΠΎΠΈΡΠΊ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π·Π°Π΄Π°Ρ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ RecursiveTask, RecursiveAction, ΠΈΠ»ΠΈ Spliterator.
Java Guruπ€ #java
π6β€3π₯3
ΠΡΡΡ Β«Java Developer. AdvancedΒ» ΠΎΡ OTUS β ΡΡΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ JVM, Π±Π°ΠΉΡΠΊΠΎΠ΄, ΡΠ±ΠΎΡΡΠΈΠΊΠΈ ΠΌΡΡΠΎΡΠ°, ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π² ΠΎΠ±Π»Π°ΠΊΠ΅.
ΠΠ°ΡΠΈ ΡΠΊΡΠΏΠ΅ΡΡΡ-ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΏΠΎΠΊΠ°ΠΆΡΡ, ΠΊΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ GC, ΡΠ½ΡΡΡ Π΄Π°ΠΌΠΏ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΡΡΠ΅ΡΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ βΠ³ΠΎΡΡΡΠΈΠ΅β ΠΌΠ΅ΡΡΠ°, Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Prometheus & Grafana ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ Π² Kubernetes.
π¦Ύ ΠΡ Π½Π°ΡΡΠΈΡΠ΅ΡΡ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡ Π²ΡΠ±ΠΎΡ JVM-ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ heap-Π΄Π°ΠΌΠΏΡ, ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Reactor ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ I/O, ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ.
Π Π΅ΠΊΠ»Π°ΠΌΠ°. ΠΠΠ Β«ΠΡΡΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠΠΠ Π 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
β€4π2π₯2
ΠΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ?
ΠΠΎΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ°ΡΡΡΡ Π΄Π°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: ΠΏΠ°ΡΠΎΠΉ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ΅ΠΊΡΠΈΡΠΌΠΈ, ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌΠΈ. ΠΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°ΡΡ, ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ java.util.concurrent Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡ Exchanger.
ΠΠ»Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ V exchange(V x). ΠΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½ΡΠ΅, ΠΈ Π²ΡΡΠ°Π΅Ρ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅. ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π² ΠΌΠ΅ΡΠΎΠ΄ exchange ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΠΎΡΡΠΈΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°.
ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠ»Π°ΡΡΠ° Exchanger ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠ°ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΈ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² Π±ΡΡΠ΅Ρ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±ΡΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π½Π° Π²ΡΠΎΡΠΎΠΉ, ΠΏΡΡΡΠΎΠΉ Π±ΡΡΠ΅Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄Π²Π° Π±ΡΡΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎ, Π½Π΅ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π»ΠΈΡΠ½ΠΈΠΉ ΡΠ°Π· ΠΏΠ°ΠΌΡΡΡ ΠΈ Π½Π΅ Π½Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ GC. ΠΠ°Π»Π΅Π΅ ΠΈΠ· ΠΏΠΎΠΏΠ°ΡΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΠΈΡ ΡΡ Π±ΡΡΠ΅ΡΠ°ΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠΎΠΈΡΡΡΡ Π΄Π»ΠΈΠ½Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½Π°Ρ ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
Java Guruπ€ #java
ΠΠΎΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ°ΡΡΡΡ Π΄Π°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: ΠΏΠ°ΡΠΎΠΉ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ΅ΠΊΡΠΈΡΠΌΠΈ, ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌΠΈ. ΠΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°ΡΡ, ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ java.util.concurrent Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡ Exchanger.
ΠΠ»Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ V exchange(V x). ΠΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½ΡΠ΅, ΠΈ Π²ΡΡΠ°Π΅Ρ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅. ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π² ΠΌΠ΅ΡΠΎΠ΄ exchange ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΠΎΡΡΠΈΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°.
ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠ»Π°ΡΡΠ° Exchanger ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠ°ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΈ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² Π±ΡΡΠ΅Ρ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±ΡΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π½Π° Π²ΡΠΎΡΠΎΠΉ, ΠΏΡΡΡΠΎΠΉ Π±ΡΡΠ΅Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄Π²Π° Π±ΡΡΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎ, Π½Π΅ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π»ΠΈΡΠ½ΠΈΠΉ ΡΠ°Π· ΠΏΠ°ΠΌΡΡΡ ΠΈ Π½Π΅ Π½Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ GC. ΠΠ°Π»Π΅Π΅ ΠΈΠ· ΠΏΠΎΠΏΠ°ΡΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΠΈΡ ΡΡ Π±ΡΡΠ΅ΡΠ°ΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠΎΠΈΡΡΡΡ Π΄Π»ΠΈΠ½Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½Π°Ρ ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
Java Guruπ€ #java
β€7π₯4π1
Builder β ΡΡΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΠΈΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ½, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠ΄Π½ΠΈΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Builder ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎ ΡΠ°ΡΡΡΠΌ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΈ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π°.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅:
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°:
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ:
@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
β€8π4π₯1
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ?
Π’Π°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠΏ-ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΠ»Π»Π±ΡΠΊ.
Π§ΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΡΠΈΡΠ°Π» ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ, ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄. ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Ρ ΡΠ΅Π»ΠΎΠΌ. ΠΠ΅ΡΠ΅ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°ΡΡΠ° Object ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ.
ΠΠΈΠΊΠ°ΠΊΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ: ΠΎΠ½ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π² ΡΠΈΠΏΠ°Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π»ΡΠ±ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ (checked ΠΈ unchecked).
ΠΠ°ΠΆΠ΅ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²ΡΠ΅Ρ ΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ, Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ² ΠΊΡΠΎΠΌΠ΅ interface Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΈΠ½ΡΡΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @FunctionalInterface. ΠΠ°Π»ΠΈΡΠΈΠ΅ ΡΡΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π½Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π½ΠΎ ΠΎΠ½ΠΎ Π΄Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ: Π΅Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π° Π½Π΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΈΠΏΠ΅ ΡΠΏΡΠΎΠ²ΠΎΡΠΈΡΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²: Callable, Supplier, Comparable.
@javatasks #java
Π’Π°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠΏ-ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΠ»Π»Π±ΡΠΊ.
Π§ΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΡΠΈΡΠ°Π» ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ, ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄. ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Ρ ΡΠ΅Π»ΠΎΠΌ. ΠΠ΅ΡΠ΅ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°ΡΡΠ° Object ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ.
ΠΠΈΠΊΠ°ΠΊΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ: ΠΎΠ½ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π² ΡΠΈΠΏΠ°Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π»ΡΠ±ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ (checked ΠΈ unchecked).
ΠΠ°ΠΆΠ΅ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²ΡΠ΅Ρ ΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ, Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ² ΠΊΡΠΎΠΌΠ΅ interface Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΈΠ½ΡΡΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @FunctionalInterface. ΠΠ°Π»ΠΈΡΠΈΠ΅ ΡΡΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π½Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π½ΠΎ ΠΎΠ½ΠΎ Π΄Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ: Π΅Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π° Π½Π΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΈΠΏΠ΅ ΡΠΏΡΠΎΠ²ΠΎΡΠΈΡΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²: Callable, Supplier, Comparable.
@javatasks #java
β€5π₯4π2
ΠΠ°Π΄Π°ΡΠΈ Ρ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ: ΠΡΠΎΠ²Π΅ΡΠΊΠ°, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ ΠΏΠΎΠΈΡΠΊΠ° (middle)
β ΠΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ ΠΏΠΎΠΈΡΠΊΠ° (BST)?
π ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ:
- ΠΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° (BST) β ΡΡΠΎ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·Π»Π° Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π»Π΅Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π΅ ΠΌΠ΅Π½ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ·Π»Π°, Π° Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠ°Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π΅ Π±ΠΎΠ»ΡΡΠ΅.
- ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·Π»Π°.
- ΠΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π»ΡΠ±ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π² ΡΠ·Π»Π°Ρ Π΄Π΅ΡΠ΅Π²Π°?
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΡΠΈΡΠ»Π°ΠΌΠΈ Π² ΡΠ·Π»Π°Ρ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅π
@javatasks #java
β ΠΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ ΠΏΠΎΠΈΡΠΊΠ° (BST)?
- ΠΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° (BST) β ΡΡΠΎ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·Π»Π° Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π»Π΅Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π΅ ΠΌΠ΅Π½ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ·Π»Π°, Π° Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠ°Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π΅ Π±ΠΎΠ»ΡΡΠ΅.
- ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·Π»Π°.
- ΠΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π»ΡΠ±ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π² ΡΠ·Π»Π°Ρ Π΄Π΅ΡΠ΅Π²Π°?
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΡΠΈΡΠ»Π°ΠΌΠΈ Π² ΡΠ·Π»Π°Ρ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅
@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
β€7π3π₯2
Π§Π΅ΠΌ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ final finally finalize?
Π’Π΅ΠΌ, ΡΡΠΎ ΡΡΠΎ Π΄Π°ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΠΈ. ΠΠ°ΠΊ ΠΈ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Object, ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΡΠ°ΡΡ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ.
finalize β ΠΌΠ΅ΡΠΎΠ΄-ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈΠ· Object.
final β ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ, ΠΏΠΎΠ»ΡΠΌ, ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅Π»ΡΠ·Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π² Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°Ρ . Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ² Π²ΠΎΠΎΠ±ΡΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ API ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ.
ΠΠΎΠ³Π΄Π° Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΎΠ½Π° ΠΎΠ±ΡΠ·Π°Π½Π° Π±ΡΡΡ effectively final. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ final Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ.
finally β ΡΠ°ΡΡΡ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ try-catch-finally.
ΠΡΠ±ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π²ΡΠ±ΡΠΎΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° try ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΌΡΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ catch (ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ). ΠΡΠΈΠΌ ΠΏΡΠΎΠ΄ΠΈΠΊΡΠΎΠ²Π°Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ Π±Π»ΠΎΠΊΠΈ catch Π² ΡΡΡΠΎΠ³ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΎΡ ΡΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°, ΠΊ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ. Π ΡΠ»ΡΡΠ°Π΅ multicatch ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡΡΡ ΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ catch. ΠΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ.
ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π±Π»ΠΎΠΊ finally. ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ½ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π±ΡΠ»ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π’ΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠ»Ρ ΡΡΠ΅Π±ΡΡΡΠΈΡ ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² (Β«ΡΠ΅ΡΡΡΡΠΎΠ²Β») Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ AutoCloseable, ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΠΊΠΎΠ΄ Π±Π»ΠΎΠΊΠ° final Π²ΡΠ½ΠΎΡΠΈΡΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄ close ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ try-with-resources. ΠΡΠ»ΠΈ Π² ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈ ΡΠ²Π½ΡΠΉ final, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΠΏΠΎΡΠ»Π΅.
Java Guruπ€ #java
Π’Π΅ΠΌ, ΡΡΠΎ ΡΡΠΎ Π΄Π°ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΠΈ. ΠΠ°ΠΊ ΠΈ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Object, ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΡΠ°ΡΡ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ.
finalize β ΠΌΠ΅ΡΠΎΠ΄-ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈΠ· Object.
final β ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ, ΠΏΠΎΠ»ΡΠΌ, ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅Π»ΡΠ·Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π² Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°Ρ . Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ² Π²ΠΎΠΎΠ±ΡΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ API ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ.
ΠΠΎΠ³Π΄Π° Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΎΠ½Π° ΠΎΠ±ΡΠ·Π°Π½Π° Π±ΡΡΡ effectively final. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ final Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ.
finally β ΡΠ°ΡΡΡ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ try-catch-finally.
ΠΡΠ±ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π²ΡΠ±ΡΠΎΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° try ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΌΡΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ catch (ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ). ΠΡΠΈΠΌ ΠΏΡΠΎΠ΄ΠΈΠΊΡΠΎΠ²Π°Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ Π±Π»ΠΎΠΊΠΈ catch Π² ΡΡΡΠΎΠ³ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΎΡ ΡΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°, ΠΊ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ. Π ΡΠ»ΡΡΠ°Π΅ multicatch ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡΡΡ ΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ catch. ΠΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ.
ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π±Π»ΠΎΠΊ finally. ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ½ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π±ΡΠ»ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π’ΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠ»Ρ ΡΡΠ΅Π±ΡΡΡΠΈΡ ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² (Β«ΡΠ΅ΡΡΡΡΠΎΠ²Β») Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ AutoCloseable, ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΠΊΠΎΠ΄ Π±Π»ΠΎΠΊΠ° final Π²ΡΠ½ΠΎΡΠΈΡΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄ close ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ try-with-resources. ΠΡΠ»ΠΈ Π² ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈ ΡΠ²Π½ΡΠΉ final, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΠΏΠΎΡΠ»Π΅.
Java Guruπ€ #java
β€6π4π₯4
Π§Π΅ΠΌ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ checked ΠΈ unchecked ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ?
ΠΠΎΠΏΡΠΎΡ ΡΠΎΡΠΌΡΠ»ΠΈΡΡΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ, ΡΡΡΡ Π²ΠΎΠΏΡΠΎΡΠ° β ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ²Π°ΡΡ checked ΠΈ unchecked. Checked ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² ΡΠΈΠ³Π½Π°ΡΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠ°Π·Π΄Π΅Π»Π΅ throws; ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² throws Π² Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π΅. Unchecked ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π° Π² throws.
π Throwable β Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ throw ΠΈ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ try-catch
π RuntimeException β Β«Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅Β» unchecked-ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
π Error β unchecked ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°ΡΡ Β«ΡΠ΅ΡΡΠ΅Π·Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΒ» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ (Ρ
ΠΎΡΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ). Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ JVM ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π² Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΈ Π½Π΅ Π΄Π°Π²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
Π³Π°ΡΠ°Π½ΡΠΈΠΉ
π Exception (ΠΊΡΠΎΠΌΠ΅ RuntimeException) β checked ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
@javatasks #java
ΠΠΎΠΏΡΠΎΡ ΡΠΎΡΠΌΡΠ»ΠΈΡΡΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ, ΡΡΡΡ Π²ΠΎΠΏΡΠΎΡΠ° β ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ²Π°ΡΡ checked ΠΈ unchecked. Checked ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² ΡΠΈΠ³Π½Π°ΡΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠ°Π·Π΄Π΅Π»Π΅ throws; ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² throws Π² Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π΅. Unchecked ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π° Π² throws.
@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
β€5π₯4π3
ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ default?
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ (Ρ Java 1.5) ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΎΡΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ.
Π Java 8 Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π»ΡΠΌΠ±Π΄Π°ΠΌΠΈ ΠΈ ΡΡΡΠΈΠΌΠ°ΠΌΠΈ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΎΡΡΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½ΠΎΠ²ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ. ΠΠΈΠΊΡΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π»ΡΡ Π»ΠΎΠΌΠ°ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ, ΠΈ Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° default ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΠΌΡ ΡΠ΅Π»ΠΎ. ΠΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠ°ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠ½Π°Π±ΠΆΠ°ΡΡΡΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
Π ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π΅Π³ΠΎ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ, ΡΡΠΎ ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»Π°ΡΡ ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ: InterfaceName.super.methodName().
ΠΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΡΠ»ΠΈ Π΅ΡΠ΅ Π½Π° ΡΠ°Π³ ΠΊ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ Π² Java Π±Π΅ΡΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ β ΠΏΡΠΈΠΌΠ΅ΡΡΠΌ (mixin). ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π²ΡΡ Π΅ΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ.
@javatasks #java
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ (Ρ Java 1.5) ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΎΡΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ.
Π Java 8 Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π»ΡΠΌΠ±Π΄Π°ΠΌΠΈ ΠΈ ΡΡΡΠΈΠΌΠ°ΠΌΠΈ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΎΡΡΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½ΠΎΠ²ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ. ΠΠΈΠΊΡΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π»ΡΡ Π»ΠΎΠΌΠ°ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ, ΠΈ Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° default ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΠΌΡ ΡΠ΅Π»ΠΎ. ΠΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠ°ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠ½Π°Π±ΠΆΠ°ΡΡΡΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
Π ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π΅Π³ΠΎ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ, ΡΡΠΎ ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»Π°ΡΡ ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ: InterfaceName.super.methodName().
ΠΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΡΠ»ΠΈ Π΅ΡΠ΅ Π½Π° ΡΠ°Π³ ΠΊ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ Π² Java Π±Π΅ΡΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ β ΠΏΡΠΈΠΌΠ΅ΡΡΠΌ (mixin). ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π²ΡΡ Π΅ΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ.
@javatasks #java
π7π₯4β€1
Π ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ?
ΠΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎΠ»Ρ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² JLS 8.3.1:
π ΠΠ΅Π»ΡΠ·Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄Π²Π°ΠΆΠ΄Ρ;
π ΠΠ΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
ΠΠΎΡΡΠ΄ΠΎΠΊ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ, Π½ΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ:
@ΠΠ½Π½ΠΎΡΠ°ΡΠΈΠΈ, Π΄ΠΎΡΡΡΠΏ,
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² JLS 8.4.3:
π Π’Π΅ ΠΆΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎ ΠΈ ΠΊ ΠΏΠΎΠ»Ρ;
π Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ abstract ΠΊΡΠΎΠΌΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ protected ΠΈΠ»ΠΈ public;
π native ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ strictfp.
Π ΡΠ°ΠΊ ΠΆΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ:
@ΠΠ½Π½ΠΎΡΠ°ΡΠΈΠΈ, Π΄ΠΎΡΡΡΠΏ,
Java Guruπ€ #java
ΠΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎΠ»Ρ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² JLS 8.3.1:
ΠΠΎΡΡΠ΄ΠΎΠΊ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ, Π½ΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ:
@ΠΠ½Π½ΠΎΡΠ°ΡΠΈΠΈ, Π΄ΠΎΡΡΡΠΏ,
static final transient volatile
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² JLS 8.4.3:
Π ΡΠ°ΠΊ ΠΆΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ:
@ΠΠ½Π½ΠΎΡΠ°ΡΠΈΠΈ, Π΄ΠΎΡΡΡΠΏ,
abstract static final synchronized native strictfp
Java Guruπ€ #java
Please open Telegram to view this post
VIEW IN TELEGRAM
π10π₯6β€1