Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π±Π°ΡΡΠ΅Ρ Π² ΠΊΠ°Π½ΠΊΠ°ΡΠ΅Π½ΡΠΈ
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π±Π°ΡΡΠ΅Ρ Π² ΠΊΠ°Π½ΠΊΠ°ΡΠ΅Π½ΡΠΈ
— Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π±ΡΠ΄Π΅Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ, Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΡΠ΅ΠΌΠ° β ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ.
— Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°? Π― ΡΡΠΎ-ΡΠΎ ΠΏΡΠΎ ΡΡΠΎ ΡΠ»ΡΡΠ°Π».
— ΠΠ°Π²Π½ΡΠΌ-Π΄Π°Π²Π½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΎΠ±ΡΠ·Π°Π½ Π±ΡΠ» ΡΠΌΠ΅ΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ. Π£ΠΌΠ΅Π» ΠΈ ΠΏΠΈΡΠ°Π». ΠΠΎ ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΊΠ°Π½ΡΠ»ΠΈ Π² Π»Π΅ΡΡ. Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅ΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π΄ΡΡΠ½ΡΠΌ ΡΠΎΠ½ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π½ΠΎ.
Π Java (Π΄Π° ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ) ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ. Π’Π²ΠΎΡ Π·Π°Π΄Π°ΡΠ° β Π½Π°ΡΡΠΈΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ Π΅ΡΡΡ.
— Π£ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Collections Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ sort, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ, Π° Π΅ΡΠ»ΠΈ ΡΠΎΡΠ½Π΅Π΅ β ΡΠΏΠΈΡΠΊΠΎΠ². ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΡ Map ΠΈ Set Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠ°/Π½ΠΎΠΌΠ΅ΡΠ°, Π·Π½Π°ΡΠΈΡ, ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΌ Π½Π΅ΡΠ΅Π³ΠΎ.
— ΠΠ°, Ρ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠ», Ρ ΠΊΠΎΠ³Π΄Π°-ΡΠΎ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΏΠΈΡΠΊΠ° ΡΠΈΡΠ΅Π».
— ΠΡΠ»ΠΈΡΠ½ΠΎ. ΠΠΎ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠΎΡΠ½Π΅Π΅ ΡΠ΅ΠΌ, ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ»Π°, Π½ΠΎ ΠΈ Π»ΡΠ±ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΏΠΎ Π»ΡΠ±ΡΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ. Π ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π΅ΠΌΡ Π² ΡΡΠΎΠΌ Π΄Π²Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°: Comparable ΠΈ Comparator.
ΠΠ½ΠΎΠ³Π΄Π° Π±ΡΠ²Π°Π΅Ρ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π° Π½Π΅ ΡΠΈΡΠ»Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΡΠ΅Π±Ρ Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ Π»ΡΠ΄Π΅ΠΉ, ΠΈ ΡΡ Ρ ΠΎΡΠ΅ΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Comparable.
ΠΠ°Π²Π°ΠΉ Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠΊΠ°ΠΆΡ ΡΠ΅Π±Π΅ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈ Π²ΡΠ΅ ΡΡΠ°Π½Π΅Ρ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅:
| ΠΡΠΈΠΌΠ΅Ρ |
|---|
| public class Woman implements Comparable < public int age; public Woman(int age) < Collections.sort(women); |
Π§ΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΠΈΡΡΡΡ ΠΈΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Comparable. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Comparable ΡΠ²Π»ΡΠ΅ΡΡΡ genericβΠΎΠΌ β Ρ.Π΅. ΡΠΈΠΏΠΎΠΌ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ. Π£ Π½Π΅Π³ΠΎ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ generic-ΠΌΠ΅ΡΠΎΠ΄ β compare(To). Π ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ (this). Π’.Π΅. Π½Π°Π΄ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΈ ΡΡΠ°Π²Π½ΠΈΡΡ Π² Π½Π΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ (this) Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ.
— Π ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ compare? Π― Π΄ΡΠΌΠ°Π», ΡΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ true/false Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ β Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡΡΠ΅.
— Π’ΡΡ Π²ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΈΡΡΠ΅Π΅. ΠΠ΅ΡΠΎΠ΄ compare Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ true/false, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° int. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ°ΠΊ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ.
ΠΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π»ΠΈ ΠΎΠ΄Π½ΠΎ ΡΠΈΡΠ»ΠΎ, ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠ΅, ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ Π²ΡΡΠΈΡΠ°Π΅Ρ ΠΈΠ· ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Π²ΡΠΎΡΠΎΠ΅, Π° ΠΏΠΎΡΠΎΠΌ ΡΠΌΠΎΡΡΠΈΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ. ΠΡΠ»ΠΈ 0 β ΡΠΈΡΠ»Π° ΡΠ°Π²Π½Ρ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΡΠΈΡΠ»ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ Π½ΡΠ»Ρ, ΡΠΎ Π²ΡΠΎΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π±ΠΎΠ»ΡΡΠ΅, Π° Π΅ΡΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ»Ρ, ΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΆΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
Π’ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ° ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΠ°. Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ compare Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΠ½ΡΡΡ Π½ΠΎΠ»Ρ, Π΅ΡΠ»ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°Π²Π½Ρ. ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ compare Π²Π΅ΡΠ½ΡΠ» ΡΠΈΡΠ»ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ»Ρ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π½Π°Ρ (this) ΠΎΠ±ΡΠ΅ΠΊΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ. ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ compare Π²Π΅ΡΠ½ΡΠ» ΡΠΈΡΠ»ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ Π½ΡΠ»Ρ, ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ this ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ.
— ΠΠ°, Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡ-ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ-ΡΠΈΡΠ»Ρ, ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎ Π²Π΅ΡΠ½ΡΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ β Π²ΡΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ. ΠΠ°ΠΊ ΡΡΠΎ ΠΈ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅.
— ΠΡΠΎΠ΄Π΅ Π²ΡΠ΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ. Π₯ΠΎΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ Π²ΡΠ΅. ΠΠΎ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅.
— ΠΡΠ»ΠΈΡΠ½ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ Π·Π°Π΄Π°ΡΡ. Π’Ρ Π½Π°ΠΏΠΈΡΠ°Π» ΠΊΡΡΡΠΎΠΉ ΡΠ°ΠΉΡ ΠΏΠΎ ΠΏΠΎΡΠΈΠ²Ρ ΠΆΠ΅Π½ΡΠΊΠΎΠΉ ΠΎΠ΄Π΅ΠΆΠ΄Ρ Π² ΠΠΈΡΠ°Π΅. ΠΠ»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ²ΠΎΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡ ΠΊΠ»Π°ΡΡ Woman. Π’Ρ Π΄Π°ΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π» ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΡ Π²ΡΠ΅Ρ . ΠΠΎ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°β¦
ΠΠ±ΡΠ΅ΠΊΡ Woman ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Ρ ΡΠ΅Π±Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ·ΡΠ°ΡΡ, Π° Π΅ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ : ΠΈΠΌΡ, ΡΠ°ΠΌΠΈΠ»ΠΈΡ, ΡΠΎΡΡ, Π²Π΅Ρ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π΅ΡΠ΅ΠΉ, β¦
Π ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, ΠΈ ΡΡΡ Π²ΡΡΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ: Π° ΠΊΠ°ΠΊ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ? ΠΠΎ Π²Π΅ΡΡ, ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΡ, ΠΏΠΎ ΡΠ°ΠΌΠΈΠ»ΠΈΠΈ?
— ΠΠΌ. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ°ΡΡΠΎ Π²ΠΈΠΆΡ ΡΠ°Π±Π»ΠΈΡΡ Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ. Π ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ?
— Π Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ Ρ ΠΎΡΠ΅Π» ΡΠ΅Π±Π΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ β ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Comparator. Π Ρ Π½Π΅Π³ΠΎ ΡΠΎΠΆΠ΅ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ compare, ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Π° Π΄Π²Π°. ΠΠΎΡ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
| ΠΡΠΈΠΌΠ΅Ρ |
|---|
| public class Woman < public int age; public int childrenCount; public int weight; public int height; public String name; public Woman(int age) < |
| ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: |
| public stati void main(String[] args ) < ArrayList women = new ArrayList (); women.add(new Woman(18)); women.add(new Woman(21)); women.add(new Woman(5)); Collections.sort(women, compareByHeight ); |
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Comparator, Π»ΠΎΠ³ΠΈΠΊΠ° ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΏΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ ΠΏΡΡΡΠ΅ΡΡΡ Π²Π½ΡΡΡΡ ΠΊΠ»Π°ΡΡΠ°/ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π° ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅.
— Π’.Π΅. Ρ ΠΌΠΎΠ³Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Comparator, Π½ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ? Π ΠΎΠ΄Π½ΠΎΠΌ β weight, Π² Π΄ΡΡΠ³ΠΎΠΌ β age, Π² ΡΡΠ΅ΡΡΠ΅ΠΌ β height?
— ΠΠ°, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ.
ΠΡ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ Collections.sort, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΡΠ΄Π° ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ Π΅ΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Comparator ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΏΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.
— ΠΠΌ. ΠΡΠΎΠ΄Π΅ Π²ΡΠ΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΠ°ΠΉ-ΠΊΠ° Ρ ΡΠ°ΠΌ ΠΏΠΎΠΏΡΠΎΠ±ΡΡ. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΠΎ Π²Π΅ΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊ:
Collections.sort(women, compareByWeight );
— ΠΡΠ»ΠΈΡΠ½ΠΎ. Π Π΅ΡΠ»ΠΈ Ρ Ρ ΠΎΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅?
— Π ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ? ΠΡΠ²Π΅Ρ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ!
— Π Π΅ΡΠ»ΠΈ Ρ Ρ ΠΎΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΡΠ°ΠΌΠΈΠ»ΠΈΠΈ? ΠΠ°ΠΊ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ, ΠΠΈΠ»Π°Π°Π±ΠΎ?
— Π Ρ ΡΡΡΠΎΠΊ ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ compare, Π½Π°Π΄ΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·Π²Π°ΡΡ Π΅Π³ΠΎ:
| ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠΎΡΡΠΈΡΡΡΡΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ: |
|---|
| Comparator compareByName = new Comparator () < public int compare (Woman o1, Woman o2) < return o1.name. compareTo (o2.name); > >; Collections.sort(women, compareByName ); |
— ΠΡΠΎ Π±ΡΠ» ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΡΡΠΎΠΊ, ΠΠΈΠ»Π°Π°Π±ΠΎ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ ΡΠ΅Π±Π΅ Π±ΠΎΠ»ΡΡΠΎΠ΅.
— Π ΡΠ΅Π±Π΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ, Π΄ΡΡΠ³!
2. ΠΠ°Π΄Π°ΡΠΈ Π½Π° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΈ comparator
| ΠΠ°Π΄Π°ΡΠΈ | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1. ΠΠΎΡΠΈΡΠ°ΡΡ Π² ΠΈΠ½Π΅ΡΠ΅ ΠΏΡΠΎ ΠΌΠ΅Π΄ΠΈΠ°Π½Ρ Π²ΡΠ±ΠΎΡΠΊΠΈ3. Π Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΡΠ΅ΡΡΡΡΡ, ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡ, ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°— ΠΡΠΈΠ²Π΅Ρ, ΠΠΌΠΈΠ³ΠΎ! Π₯ΠΎΡΡ ΡΠ΅Π±Π΅ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΡΡΡΡΠΎΠ². Π Π°Π·Π½ΡΠΌΠΈ Π½ΠΈΡΡΠΌΠΈ, ΡΡΠ½ΠΎΠ΅ Π΄Π΅Π»ΠΎ. Π― Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ Π³ΠΎΠ²ΠΎΡΡ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°Ρ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π½ΠΈΡΠ΅ΠΉ ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡ ΡΠ΅ΡΠ°ΡΡ. ΠΡΠΎ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΈΡΠ΅ΠΉ β ΡΡΠΎ ΠΏΠ»ΠΎΡ ΠΎ. ΠΠΈΡΠΈ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π§Π΅ΠΌ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° β ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π² Π½Π΅ΠΉ Π½ΠΈΡΠ΅ΠΉ ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°ΡΡΠ΅ΠΉ. Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ (ΡΠ»Π°Π±ΠΎΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅) ΡΠ°ΡΡΠΈ ΠΎΡΠ΅Π½Ρ Π²ΡΠ³ΠΎΠ΄Π½ΠΎ. ΠΡΠ΅Π΄ΡΡΠ°Π²Ρ, ΡΡΠΎ ΡΠ²ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²Π½ΡΡΡΠΈ ΡΠ°Π·Π±ΠΈΡΠ° Π½Π° 100 Π½ΠΈΡΠ΅ΠΉ. ΠΠΎ Ρ ΡΠ΅Π±Ρ Π²ΡΠ΅Π³ΠΎ Π΄Π²ΡΡ ΡΡΠ΄Π΅ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ΄ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ 50 Π½ΠΈΡΠ΅ΠΉ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΡΠ΅Π±Π΅ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΠ°ΡΡΠΈΡΡ ΠΌΠΎΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΊΡΠΏΠ°Π΅ΡΡ Π΄Π²ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΏΠ°ΡΡ ΠΊΡΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π΄Π»Ρ Π½Π΅Π³ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Ρ Π½Π΅Π³ΠΎ ΡΡΠΌΠΌΠ°ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎ 32- ΡΠ΄Π΅Ρ, ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠ°ΡΡΠΈ Π² 2-20 ΡΠ°Π·. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΠ°ΡΡΠ΅ΠΉ ΠΎΠ½Π° ΡΠ°Π·Π±ΠΈΡΠ°. ΠΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½ Π΄ΠΎΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Java Π² ΡΠ΅ΠΊΡΠΎΡΠ΅ Enterprise-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΠ»ΠΈ Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ Π½ΡΠΆΠ΄, ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΈΡΡΡ 20 ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΠΎ ΠΊΡΠΏΠΈΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΡΠ²Π΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π΄Π΅ΡΠ΅Π²Π»Π΅, ΡΠ΅ΠΌ ΡΡΠΊΠΎΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² 2 ΡΠ°Π·Π°. — Π’Π°ΠΊ Π²ΠΎΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ΅ΠΌ Π΄Π΅Π»ΠΎ. — ΠΠΎ! ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ΅ΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ Π½ΠΈΡΡ, ΠΎΠ½ ΡΠ΅ΡΠ°Π΅Ρ ΠΎΠ΄Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π° ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π²Π΅. Π‘Π»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΡΠ΅ΠΉ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π² Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π±ΠΈΡΡ Π½Π° ΡΠ°ΡΡΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π² ΡΠ°Π·Π½ΡΡ Π½ΠΈΡΡΡ . ΠΠΎ-Π²ΡΠΎΡΡΡ , Π²ΡΠ΅ Π½ΠΈΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅. Π§Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΈΡΠ΅ΠΉ, ΡΠ΅ΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· Π½ΠΈΡ . Π, ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ β Π½ΠΈΡΠΈ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ (ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΈΡΡ Ρ ΠΎΡΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π² ΡΠ°ΠΉΠ» ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΈΡ Π½ΠΈΡΠ΅ΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ, ΠΈ ΠΎΠ½ΠΈ Ρ ΠΎΡΡΡ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» β ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΌΠ΅ΡΠ°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ. Π§ΡΠΎΠ±Ρ Π² ΡΠ°ΠΉΠ»Π΅ Π½Π΅ Π±ΡΠ»ΠΎ ΠΌΠ΅ΡΠ°Π½ΠΈΠ½Ρ, ΠΊΠ°ΠΆΠ΄Π°Ρ Π½ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΡΠ°ΠΉΠ»Ρ β Ρ.Π΅. ΠΏΠΎΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ΄Π½Π° Π½ΠΈΡΡ, Π΄ΡΡΠ³ΠΈΠ΅ ΠΆΠ΄ΡΡ. — ΠΠ°, Ρ ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° synchronized. — Π Π΅ΡΠ»ΠΈ Π½ΠΈΡΠΈ ΠΏΠΈΡΡΡ Π² ΡΠ°Π·Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ? — Π€ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ β ΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½ΠΎ ΠΆΠ΅ΡΡΠΊΠΈΠΉ Π΄ΠΈΡΠΊ ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½. — Π’.Π΅. ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΡΠΎ-ΡΠΎ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°? — Π€ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ β ΠΠ°, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ²ΠΎΠ΅ΠΉ Π½ΠΈΡΠΈ Π½Π°Π΄ΠΎ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅ ΠΊΡΠΎΠΌΠ΅ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π½Π΅Π΅ Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ-ΡΠΎ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π½ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π½ΠΈΡΡΡ ΠΈ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΆΠ΄Π°ΡΡ. — Π ΡΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°ΡΡ? ΠΠ°ΠΊ ΡΠ·Π½Π°ΡΡ β Π΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΡΠ΅ΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ? — ΠΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π£ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ΡΡΡ Π΅Π³ΠΎ Β«Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΒ», ΠΊΠΎΡΠΎΡΡΠΉ Π·Π½Π°Π΅Ρ Π²ΡΠ΅ Β«ΡΠ΅ΡΡΡΡΡΒ», ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π·Π½Π°Π΅Ρ ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΈ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ΠΈ Ρ ΠΎΡΠΎΡΠΎ/ΠΏΠ»ΠΎΡ ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΡΡΡ. — Π’ΡΡ Π΅ΡΡΡ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ°: Π°) ΠΏΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ΄ Π½Π°ΡΠ°Π»ΠΎΠΌ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ° Π±) Π½Π°Π±ΠΈΡΡ ΡΠΈΡΠ΅ΠΊ ΡΠ°ΠΌΠΎΠΌΡ — Π― β ΡΠΎΠ±ΠΎΡ, Ρ ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ²Π°Π΅Ρ ΡΠΈΡΠ΅ΠΊ β ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΌΡΡΠΈΠ½Ρ. — ΠΡ, Π·Π½Π°ΡΠΈΡ, Π½Π°Π±ΠΈΡΡ Π²ΠΌΡΡΠΈΠ½. — Π―ΡΠ½ΠΎ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ. Π’Ρ ΠΏΡΠΎΡΡΠ½ΠΈΠ»Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΠΆΠ΅ Π½Π°ΡΠ°Π» Π»ΠΎΠΌΠ°ΡΡ Π³ΠΎΠ»ΠΎΠ²Ρ. ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ util.concurrentΠ Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π½ΠΎ ΠΈ Π·Π°ΡΠΈΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ. ΠΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ ΠΏΠ°ΠΊΠ΅Ρ java.util.concurrent. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ java.util.concurrent ΠΎΠ½ΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΡΠ°ΡΡΠΎ. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΎΠ±Π·ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠ° java.util.concurrent, ΡΠ°Π·Π±ΠΈΡΠΎΠ³ΠΎ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π³ΡΡΠΏΠΏ. Π ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°Ρ ΡΠ°ΠΉΡΠ°. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Oracle Java Concurrency Tutorials ΠΈ Π² ΠΊΠ½ΠΈΠ³Π΅ Doug Lea Β«Concurrent Programming in Java by Doug LeaΒ», ΡΠ²Π»ΡΡΡΠ΅Π³ΠΎΡΡ Π°Π²ΡΠΎΡΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ° java.util.concurrent ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° ΡΡΠ°ΡΠ° ΠΡΡ ΠΠΎΡΠΊ. Π Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ java ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΠΌ Doug Lea ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ½Π΅ΡΡΠΈ collections ΠΈ util.concurrent, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΎΡΡΠ°Π·ΠΈΠ»ΠΈΡΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ JDK. ΠΠ° Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΠΊΠ΅ Doug Lea ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π° Π²ΡΠΎΡΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Concurrent Programming in Java™: Design Principles and Pattern, 2nd Edition, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Π·Π΄Π΅ΡΡ. Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° java.util.concurrentΠΠ»Π°ΡΡΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ° java.util.concurrent ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠ½Π΅Π½Ρ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³ΡΡΠΏΠΏ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ :
Concurrent CollectionsΠΠ±ΡΡΠ½ΡΠ΅ Π½Π°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ , ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ List, Set ΠΈ Map, Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ , Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ, Ρ.Π΅. ΡΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ°ΠΌΠ»Π΅Π½ΠΈΡ Collections framework (synchronizedList, synchronizedSet, synchronizedMap), ΠΏΠΎΡΠ²ΠΈΠ²ΡΠΈΠ΅ΡΡ Π² JDK 1.2, ΠΈΠΌΠ΅ΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ. ΠΠ°ΠΊΠ΅Ρ java.util.concurrent ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ²ΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ConcurrentModificationException. ΠΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ (add, set, remove) ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΡΠΈΠΌ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΏΡΠΎΡ ΠΎΠ΄Π΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΏΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ConcurrentModificationException. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ. CopyOnWriteArrayList ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ CopyOnWrite ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ArrayList. ΠΠ»Π°ΡΡ CopyOnWriteArrayList ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΌΠ°ΡΡΠΈΠ², ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ. Π’.Π΅. ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡΡΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ CopyOnWriteArrayList ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π²Π΅ΡΠ½ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΈ Π½Π΅ Π²ΡΠ·ΠΎΠ²ΡΡ ConcurrentModificationException. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ CopyOnWriteArrayList Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. ConcurrentHashMap ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ (implements) ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ java.util.concurrent.ConcurrentMap ΠΈ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ HashMap ΠΈ Hashtable Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠ°Ρ key-value. Π‘oncurrentHashMap ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ², ΠΈ Π΄Π°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π³ΡΡΠΏΠΏΡ HashMapβΠΎΠ². ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π²Π½ΠΎ 16. ΠΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΠΌ, Π° Π½Π΅ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΡΠ΅ΡΠ°ΡΠΎΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠΈΠΊΡΠΈΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΡΠ°Π»Π° Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ConcurrentHashMap Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. CopyOnWriteArraySet Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ CopyOnWriteArrayList Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Set. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ CopyOnWriteArraySet Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. ConcurrentNavigableMap ΡΠ°ΡΡΠΈΡΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° NavigableMap Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ; ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΊΠ»Π°ΡΡΠ° Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΠΈ Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ConcurrentModificationException. ConcurrentSkipListMap ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ TreeMap Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ ΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ. ConcurrentSkipListSet Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ConcurrentSkipListMap Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Set. Concurrent Synchronizers, ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΠ°Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° java.util.concurrent, Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ. Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ β ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΌΠ΅ΡΠ°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡ, ΠΎΠ½ ΠΆΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡ, ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π΄Π²Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ β ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°Π½ΡΡ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½. ΠΠΎΠ½ΠΈΡΠΎΡ (ΠΌΡΡΡΠ΅ΠΊΡ) β ΡΡΠΎ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ. ΠΡΡΡΠ΅ΠΊΡ Π²ΡΡΡΠΎΠ΅Π½ Π² ΠΊΠ»Π°ΡΡ Object ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΈΠΌΠ΅Π΅ΡΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π² Java ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° synchronized. ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ synchronized Π² ΠΊΠ»Π°ΡΡΠ°Ρ , ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈ. ΠΠΎ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ synchronized Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°Ρ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ synchronized Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ (Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ) Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π±Π»ΠΎΠΊΡ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠΉ. ΠΠ°ΠΊΠ΅Ρ java.util.concurrent ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ². Semaphore (ΡΠ΅ΠΌΠ°ΡΠΎΡ) β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ΅ΡΡΠΈΠΊΠ°. ΠΡΠΈ Π·Π°ΠΏΡΠΎΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ»Ρ Π΄ΠΎΡΡΡΠΏ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ, Π° ΡΡΠ΅ΡΡΠΈΠΊ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β Π΄ΠΎΡΡΡΠΏ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΡΡΡ. ΠΡΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΡΠ΅ΡΡΡΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅. ΠΡΠΎΡΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΌΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Β«ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎΡΡΠΈΒ», ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΌ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΡΠΎΠΊΠ°ΠΌ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. CountDownLatch (Β«Π·Π°ΡΠ΅Π»ΠΊΠ° Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΠΎΡΡΡΠ΅ΡΠΎΠΌΒ») β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠΌ. ΠΡΠΈ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠΈ ΡΡΠ΅ΡΡΠΈΠΊΠ°, Ρ.Π΅. ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²ΡΠ΅Ρ ΡΡΠ»ΠΎΠ²ΠΈΠΉ, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π±ΡΠ΄ΡΡ ΡΠ½ΡΡΡ ΠΈ ΠΎΠ½ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ CountDownLatch ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΡΠΊΡΠΊΡΡΡΠΎΠ²ΠΎΠ΄, ΡΠΎΠ±ΠΈΡΠ°ΡΡΠΈΠΉ Π³ΡΡΠΏΠΏΡ ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΡΠΈΡΡΠΎΠ². ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π³ΡΡΠΏΠΏΠ° ΡΠΎΠ±ΡΠ°Π½Π° ΠΎΠ½Π° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π° ΡΠΊΡΠΊΡΡΡΠΈΡ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΠ΅ΡΡΠΈΠΊ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎ-Π½ΠΎΠ²ΠΎΠΌΡ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ CyclicBarrier β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠΏΠ° Β«ΠΠ°ΡΡΠ΅ΡΒ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ . ΠΠ°ΡΡΠ΅ΡΠ½Π°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ° (ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΡΠΎΠΊ) Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΏΡΠΈΡ ΠΎΠ΄Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π³ΡΡΠΏΠΏΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ Π±Π°ΡΡΠ΅ΡΠ°, Π±Π°ΡΡΠ΅Ρ ΡΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ. Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±Π°ΡΡΠ΅Ρ CyclicBarrier, ΡΠ°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ CountDownLatch, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ΅ΡΡΠΈΠΊ ΠΈ ΠΏΠΎΡ ΠΎΠΆ Π½Π° Π½Π΅Π³ΠΎ. ΠΡΠ»ΠΈΡΠΈΠ΅ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Β«Π·Π°ΡΠ΅Π»ΠΊΡΒ» Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Ρ ΡΡΡΡΡΠΈΠΊ ΠΎΠ±Π½ΡΠ»ΠΈΡΡΡ, Π° Π±Π°ΡΡΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ (Π² ΡΠΈΠΊΠ»Π΅). ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ Exchanger β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΡΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ Π΄Π°Π½Π½ΡΠΌΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ null Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅ΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ, ΠΊΠ°ΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ Π΄Π²ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½ΡΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° exchange, ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ°ΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊΠ°. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ exchange, ΡΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ Exchanger Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ Phaser β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠΏΠ° Β«ΠΠ°ΡΡΠ΅ΡΒ», Π½ΠΎ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ CyclicBarrier, ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΡΡΠ΅ΡΠΎΠ² (ΡΠ°Π·), ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°Π·Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π½ΡΠΌ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ ΠΡΠΎΠΌΠ°ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ° java.concurrent.atomicΠΠ°ΠΊΠ΅Ρ java.util.concurrent.atomic Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π΄Π΅Π²ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ , Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠΉ, Π΅ΡΠ»ΠΈ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ , Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, Π½ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ synchronized. ΠΡΠΎΠΌΠ°ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ compareAndSet, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΎΠΏΡΠΈΠΌΠΈΡΡΠΈΡΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΡΠ°Π²Π½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π’.Π΅. Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π±ΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΡΠΎ ΠΎΠ½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈ ΠΌΠ΅ΡΠΎΠ΄ compareAndSet Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΡΠ΄ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΠΈΠΌΠ΅ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Compare-And-Swap (CAS), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ compareAndSet. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ², Π³Π΄Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΈΠ½ΡΠΌΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Π·Π΄Π΅ΡΡ. QueuesΠΠ°ΠΊΠ΅Ρ java.util.concurrent ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ»Π°ΡΡΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΈ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Β«Π·Π°ΡΠΎΡΠ΅Π½ΡΒ» Π½Π° ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ. ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ConcurrentLinkedQueue ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Queue ΠΈ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ ΠΈ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. Π Π°Π·ΠΌΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ConcurrentLinkedQueue Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ. ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ wait-free Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΎΡ Michael & Scott, Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ garbage collector’ΠΎΠΌ. ΠΠ°Π½Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ ΠΈ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡ, Ρ.ΠΊ. ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° CAS (Compare-And-Swap). ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. ConcurrentLinkedDeque ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Deque (Double ended queue), ΡΠΈΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Β«DeckΒ». ΠΠ°Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ ΠΎΠ±Π΅ΠΈΡ ΡΡΠΎΡΠΎΠ½ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠ»Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±Π° ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ°Π±ΠΎΡΡ : FIFO (First In First Out) ΠΈ LIFO (Last In First Out). ConcurrentLinkedDeque ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ LIFO, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π° ΡΡΠ΅Ρ Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°Π΅Ρ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ConcurrentLinkedQueue. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. ΠΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ²Π½ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌ : ΡΠ°Π·Π³ΡΠ΅Π±Π°ΡΡΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Ρ Π½Π°ΠΏΠ»ΡΠ²ΠΎΠΌ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Β«out of memoryΒ» ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΡΡ IO/Net Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΏΠ°Π΄Π΅Ρ Π² ΡΠ°Π·Ρ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΡΡΡΠΏΠΈΡ ΠΎΡΠΊΠ°Π· ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ°ΡΡΠ°ΠΌ ΠΈΠ»ΠΈ ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. Π‘Π°ΠΌΠΎΠ΅ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎ, ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ, ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ. ΠΠ»Ρ ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°Π΅Π² Π½ΡΠΆΠ½Π° Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π·Π°Π΄Π°ΡΡ Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ/ΠΈΠ»ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ Π½Π°ΡΡΠ΄Ρ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΡΠ΅Π°Π³ΠΈΡΡΡΡΠΈΠ΅ Π½Π° Π½Π΅Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ queue. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π²ΡΠ·ΠΎΠ²Π΅Ρ IllegalStateException, Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΠ½Π΅Ρ false, ΡΡΠ΅ΡΠΈΠΉ Π·Π°Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΌΠ΅ΡΡΠΎ, ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ ΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ (ΡΠ°ΠΉΠΌΠ°ΡΡ) ΠΈ Π²Π΅ΡΠ½Π΅Ρ false, Π΅ΡΠ»ΠΈ ΠΌΠ΅ΡΡΠΎ ΡΠ°ΠΊ ΠΈ Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ. ArrayBlockingQueue β Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ°Ρ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠΉ Π±ΡΡΠ΅Ρ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ fair Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎΡΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π΄Π»Ρ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ (Π²ΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ) ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ (ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ). ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. LinkedBlockingQueue β Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π° ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠ·Π»Π°Ρ , ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ°Ρ Β«two lock queueΒ» Π°Π»Π³ΠΎΡΠΈΡΠΌ : ΠΎΠ΄ΠΈΠ½ lock Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π²ΡΠΎΡΠΎΠΉ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ. ΠΠ° ΡΡΠ΅Ρ Π΄Π²ΡΡ lock’ΠΎΠ² Π΄Π°Π½Π½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ArrayBlockingQueue, Π½ΠΎ ΠΈ ΡΠ°ΡΡ ΠΎΠ΄ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠ²ΡΡΠ°Π΅ΡΡΡ. Π Π°Π·ΠΌΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π΅Π½ Integer.MAX_VALUE. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. LinkedBlockingDeque β Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π° ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠ·Π»Π°Ρ , ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π»ΠΎΠΊΠΎΠΌ. Π Π°Π·ΠΌΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π΅Π½ Integer.MAX_VALUE. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. SynchronousQueue β Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΆΠ΄Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. Π’.Π΅. ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏ Β«ΠΎΠ΄ΠΈΠ½ Π²ΠΎΡΠ΅Π», ΠΎΠ΄ΠΈΠ½ Π²ΡΡΠ΅Π»Β». SynchronousQueue Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ Π΅ΠΌΠΊΠΎΡΡΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΠΌΠΊΠΎΡΡΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. LinkedTransferQueue β Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° TransferQueue, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π·Π°Π±Π΅ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ Ρ ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠΌ, ΡΠ°ΠΊ ΠΈ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΠΎΠΆΠΈΠ΄Π°ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ , ΡΠ°ΠΊ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. DelayQueue β ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ Π²ΠΈΠ΄ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄ getDelay ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Delayed. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. PriorityBlockingQueue β ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΠΎΠ±Π΅ΡΡΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° PriorityQueue. ΠΡΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Β«Π½Π°ΡΡΡΠ°Π»ΡΠ½ΡΠΌΒ» ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ, Π»ΠΈΠ±ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Comparator’Π° ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Comparable ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° java.concurrent.locksΠΠ°ΠΊΠ΅Ρ java.util.concurrent.locks Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΎΠ², ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌΠΈ. ΠΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ Π΄Π°Π΅Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π±Π΅Π· ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΈ Ρ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ. Lock β Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ/Π±Π»ΠΎΠΊΠ°ΠΌ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ synchronized. Π’Π°ΠΊ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ. ΠΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠΌΡ ΡΡΠ΅Π½Π°ΡΠΈΡ, Π΅ΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠΆΠ΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π°. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Lock Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. Condition β ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ Lock ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°/ΠΌΡΡΡΠ΅ΠΊΡΠ° (wait, notify ΠΈ notifyAll) ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ±ΡΠ΅ΠΊΡ Ρ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° lock.newCondition(). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠΎΠ² wait/notify Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Lock Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ synchronized, Π° Condition β ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Condition Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. ReadWriteLock β ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ read/write Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ReentrantReadWriteLock. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ΅Π½ΠΈΠ΅-Π·Π°ΠΏΠΈΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΡΠ°ΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅Π΄ΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ Π·Π°ΠΏΠΈΡΠΈ. Π’ΠΎΠ³Π΄Π° ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠΌΡ ΡΠ΅ΡΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅ : ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ReadWriteLock Π·Π΄Π΅ΡΡ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ExecutorsΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ concurrent Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΡΠ΅Π΄ΡΡΠ²Π°, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Future ΠΈ Callable. Callable β ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ Π°Π½Π°Π»ΠΎΠ³ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Runnable, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ call, ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° run ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Runnable. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Callable Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. FutureTask β ΠΊΠ»Π°ΡΡ-ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°, Π±Π°Π·ΠΈΡΡΡΡΠ°ΡΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Future. Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° FutureTask Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Callable. FutureTask ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Callable ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π² Future ΠΈ Runnable, ΡΠ΅Π°Π»ΠΈΠ·ΡΡ ΠΎΠ±Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ FutureTask ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Executor, Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΡΡΠ΅Π½Π° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Runnable. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° FutureTask Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ. ExecutorService β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ execute ΠΈ submit. ΠΠ±Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Runnable ΠΈΠ»ΠΈ Callable. ΠΠ΅ΡΠΎΠ΄ submit Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Future, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°. ΠΠ΅ΡΠΎΠ΄ invokeAll ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ Π·Π°Π΄Π°Ρ Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊΠ° Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π·Π°Π΄Π°Ρ Π² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ»ΠΈ Π΄ΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ΅ΡΠΎΠ΄ invokeAny Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ Π·Π°Π΄Π°Ρ. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ shutdown, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π·Π°Π²Π΅ΡΡΠΈΡΡ Π²ΡΠ΅ ΠΏΡΠΈΠ½ΡΡΡΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΈ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ . ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ScheduledExecutorService ΡΠ°ΡΡΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° ExecutorService Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π ΠΏΠ°ΠΊΠ΅Ρ concurrent Π²ΠΊΠ»ΡΡΠ΅Π½Ρ ΡΡΠΈ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΉ: ThreadPoolExecutor, ScheduledThreadPoolExecutor ΠΈ ForkJoinPool. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ-ΡΠ°Π±ΡΠΈΠΊΡ Executors. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ExecutorService Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π΄Π΅ΡΡ
|


