Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Π°Ρ€ΡŒΠ΅Ρ€ Π² канкарСнси

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Π°Ρ€ΡŒΠ΅Ρ€ Π² канкарСнси

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Π°Ρ€ΡŒΠ΅Ρ€ Π² канкарСнси. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Π°Ρ€ΡŒΠ΅Ρ€ Π² канкарСнси. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Π°Ρ€ΡŒΠ΅Ρ€ Π² канкарСнси. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Π°Ρ€ΡŒΠ΅Ρ€ Π² канкарСнси. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±Π°Ρ€ΡŒΠ΅Ρ€ Π² канкарСнси

— БСгодня Π±ΡƒΠ΄Π΅Ρ‚ нСбольшая, Π½ΠΎ интСрСсная ΠΈ полСзная Ρ‚Π΅ΠΌΠ° – сортировки ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

— Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°? Π― Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΎ это ΡΠ»Ρ‹ΡˆΠ°Π».

— Π”Π°Π²Π½Ρ‹ΠΌ-Π΄Π°Π²Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ программист обязан Π±Ρ‹Π» ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ сортировку. Π£ΠΌΠ΅Π» ΠΈ писал. Но Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΊΠ°Π½ΡƒΠ»ΠΈ Π² Π»Π΅Ρ‚Ρƒ. БСгодня написаниС своСй сортировки считаСтся Π΄ΡƒΡ€Π½Ρ‹ΠΌ Ρ‚ΠΎΠ½ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ написаниС всСго, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½ΠΎ.

Π’ Java (Π΄Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования) сортировки ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹. Ввоя Π·Π°Π΄Π°Ρ‡Π° – Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ.

— Π£ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ класса Collections Π΅ΡΡ‚ΡŒ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ sort, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сортировки ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, Π° Ссли Ρ‚ΠΎΡ‡Π½Π΅Π΅ – списков. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π² коллСкциях Map ΠΈ Set Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ порядка/Π½ΠΎΠΌΠ΅Ρ€Π°, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΌ Π½Π΅Ρ‡Π΅Π³ΠΎ.

— Π”Π°, я вспомнил, я ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ ΡƒΠΆΠ΅ использовал этот ΠΌΠ΅Ρ‚ΠΎΠ΄ для сортировки списка чисСл.

— ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ. Но этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΌΠΎΡ‰Π½Π΅Π΅ Ρ‡Π΅ΠΌ, каТСтся Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа, Π½ΠΎ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠΎ Π»ΡŽΠ±Ρ‹ΠΌ критСриям. И ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π΅ΠΌΡƒ Π² этом Π΄Π²Π° интСрфСйса: Comparable ΠΈ Comparator.

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° Π½Π΅ числа. НапримСр, Ρƒ тСбя Π΅ΡΡ‚ΡŒ список людСй, ΠΈ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ возрасту. Для этого Π΅ΡΡ‚ΡŒ интСрфСйс Comparable.

Π”Π°Π²Π°ΠΉ я сначала ΠΏΠΎΠΊΠ°ΠΆΡƒ Ρ‚Π΅Π±Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈ всС станСт понятнСС:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€
public class Woman implements Comparable
<
public int age;

public Woman(int age) <
this.age = 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) <
this.age = 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 ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΠ½Π΅Π½Ρ‹ Π² нСсколько Π³Ρ€ΡƒΠΏΠΏ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΡƒ, ΠΊΠ°ΠΊ это прСдставлСно Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ :

ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
collectionsНабор Π±ΠΎΠ»Π΅Π΅ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π½Π΅ΠΆΠ΅Π»ΠΈ стандартныС ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ· java.util ΠΏΠ°ΠΊΠ΅Ρ‚Π°
synchronizersΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ синхронизации, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ/ΠΈΠ»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
atomicНабор Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… классов, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ дСйствия ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° оптимистичСской Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ для выполнСния Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.
QueuesΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ создания Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ многопоточности.
LocksΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ synchronized, wait, notify, notifyAll
ExecutorsΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ создания ΠΏΡƒΠ»ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ планирования Ρ€Π°Π±ΠΎΡ‚Ρ‹ асинхронных Π·Π°Π΄Π°Ρ‡

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 содСрТит классы формирования Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Β«Π·Π°Ρ‚ΠΎΡ‡Π΅Π½Ρ‹Β» Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ.

ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ
ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ‹Π΅ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π° связанных ΡƒΠ·Π»Π°Ρ… (linked nodes) Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Queue ΠΈ Π΅Π³ΠΎ наслСдника Deque.

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 с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ прСдставлСно здСсь

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *