Runnable java Ρ‡Ρ‚ΠΎ это

Runnable java Ρ‡Ρ‚ΠΎ это

Runnable java Ρ‡Ρ‚ΠΎ это. metanit java. Runnable java Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. Runnable java Ρ‡Ρ‚ΠΎ это-metanit java. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Runnable java Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° metanit java

НаслСдованиС ΠΎΡ‚ класса Thread

Боздадим свой класс на основС Thread:

Класс ΠΏΠΎΡ‚ΠΎΠΊΠ° называСтся JThread. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π² конструктор класса пСрСдаСтся имя ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ‚Π΅ΠΌ пСрСдаСтся Π² конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π’ конструктор своСго класса ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π½Π΅ΠΌ вызывался конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Thread, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСдаСтся имя ΠΏΠΎΡ‚ΠΎΠΊΠ°.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΈΠΌ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ JThread.

Аналогично созданию ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ сразу нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²:

ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°

ΠœΠ΅Ρ‚ΠΎΠ΄ join() заставляСт Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Main thread) ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ примСняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ join (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС JThread).

Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈ Π½Π°Π΄ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Main thread Π·Π°Π²Π΅Ρ€ΡˆΠ°Π»ΡΡ послС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ…, Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π°Π΄ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ join.

РСализация интСрфСйса Runnable

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ run() собствСнно опрСдСляСтся вСсь Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся ΠΏΡ€ΠΈ запускС ΠΏΠΎΡ‚ΠΎΠΊΠ°.

ПослС опрСдСлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Runnable ΠΎΠ½ пСрСдаСтся Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· конструкторов класса Thread:

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ класс MyThread:

РСализация интСрфСйса Runnable Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ класса Thread. Π’Π°ΠΊΠΆΠ΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ run опрСдСляСтся ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ усыпляСт ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° 500 миллисСкунд.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Runnable фактичСски прСдставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ этого интСрфСйса ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ лямбда-выраТСния:

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

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Java

ЗдравствуйтС! Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ расскаТу Π²Π°ΠΌ ΠΎ процСссах, ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, ΠΈ ΠΎΠ± основах ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Π½Π° языкС Java. Runnable java Ρ‡Ρ‚ΠΎ это. image loader. Runnable java Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. Runnable java Ρ‡Ρ‚ΠΎ это-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Runnable java Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader
НаиболСС очСвидная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния многопоточности – это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ интСрфСйсов. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠ° Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ графичСский интСрфСйс ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π» ΠΎΡ‚Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²ΠΎ врСмя выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. НапримСр, ΠΏΠΎΡ‚ΠΎΠΊ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° интСрфСйс, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ» ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, ΠΈ Π² это врСмя Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ прогрСсс-Π±Π°Ρ€. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ», Ссли Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Β«ΠΎΡ‚ΠΌΠ΅Π½Π°Β».

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° популярная ΠΈ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, ΠΎΠ΄Π½Π° ΠΈΠ· самых Ρ…Π°Ρ€Π΄ΠΊΠΎΡ€Π½Ρ‹Ρ… областСй примСнСния многопоточности – ΠΈΠ³Ρ€Ρ‹. Π’ ΠΈΠ³Ρ€Π°Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΡΠ΅Ρ‚ΡŒΡŽ, Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ, расчСт Ρ„ΠΈΠ·ΠΈΠΊΠΈ ΠΈ Ρ‚.ΠΏ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎ процСссах.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹

ΠŸΡ€ΠΎΡ†Π΅ΡΡ β€” это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ‰Π΅Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство. Π§Π°Ρ‰Π΅ всСго ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса, Π½ΠΎ Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Chrome создаСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π΅ΠΌΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСимущСства, Π²Ρ€ΠΎΠ΄Π΅ нСзависимости Π²ΠΊΠ»Π°Π΄ΠΎΠΊ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°). ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, поэтому прямой доступ ΠΊ памяти Ρ‡ΡƒΠΆΠΎΠ³ΠΎ процСсса Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ (взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… срСдств).

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса ОБ создаСт Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Β«Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство», ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ процСсс ΠΈΠΌΠ΅Π΅Ρ‚ прямой доступ. Π­Ρ‚ΠΎ пространство ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ процСссу, содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ находится Π² ΠΏΠΎΠ»Π½ΠΎΠΌ Π΅Π³ΠΎ распоряТСнии. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ пространство процСсса проСцируСтся Π½Π° Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π‘Ρ…Π΅ΠΌΠ° этого взаимодСйствия прСдставлСна Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ страницами памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой просто ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Если процСссу становится нСдостаточно памяти, систСма выдСляСт Π΅ΠΌΡƒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ страницы ΠΈΠ· физичСской памяти. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС.

Runnable java Ρ‡Ρ‚ΠΎ это. image loader. Runnable java Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. Runnable java Ρ‡Ρ‚ΠΎ это-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Runnable java Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader

ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ опСрационная систСма создаСт процСсс, загруТая Π² Π΅Π³ΠΎ адрСсноС пространство ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π·Π°Ρ‚Π΅ΠΌ запускаСт Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ созданного процСсса.

ΠŸΠΎΡ‚ΠΎΠΊΠΈ

Один ΠΏΠΎΡ‚ΠΎΠΊ – это ΠΎΠ΄Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π° исполнСния ΠΊΠΎΠ΄Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ выполняСт инструкции процСсса, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ этого процСсса.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π·Ρƒ Β«ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈΒ». Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎ ядро процСссора, Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, приходится ΠΎΠ΄Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π° исполнСния. Π’ΠΎ Π΅ΡΡ‚ΡŒ одноядСрный процСссор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π·Π° Ρ€Π°Π· (Π² ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠΌ случаС). Однако запуск Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈ Π² систСмах с одноядСрными процСссорами. Π’ этом случаС систСма Π±ΡƒΠ΄Π΅Ρ‚ пСриодичСски ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ давая Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. Вакая схСма называСтся псСвдо-ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ. БистСма Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ состояниС (контСкст) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈ восстанавливаСт Π΅Π³ΠΎ ΠΏΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ контСкст ΠΏΠΎΡ‚ΠΎΠΊΠ° входят Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠ°ΠΊ стСк, Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ рСгистров процСссора, адрСс исполняСмой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ прочСС…

ΠŸΡ€ΠΎΡ‰Π΅ говоря, ΠΏΡ€ΠΈ ΠΏΡΠ΅Π²Π΄ΠΎΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² процСссор мСчСтся ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², выполняя ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ….

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит:

Runnable java Ρ‡Ρ‚ΠΎ это. image loader. Runnable java Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. Runnable java Ρ‡Ρ‚ΠΎ это-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Runnable java Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader

Π¦Π²Π΅Ρ‚Π½Ρ‹Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ Π½Π° рисункС – это инструкции процСссора (Π·Π΅Π»Π΅Π½Ρ‹Π΅ – инструкции Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, синиС – ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ). Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ‚ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. ПослС запуска ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΅Π³ΠΎ инструкции Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π²ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΊΡƒ с инструкциями Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Кол-Π²ΠΎ выполняСмых инструкций Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.

Π’ΠΎ, Ρ‡Ρ‚ΠΎ инструкции ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΊΡƒ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ взаимодСйствия ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ посвящСна ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ, Π° ΠΏΠΎΠΊΠ° ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Java…

Запуск ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΈΠΌΠ΅Π΅Ρ‚ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎΡ‚ΠΎΠΊ. Π’ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, называСтся Π³Π»Π°Π²Π½Ρ‹ΠΌ. Π’ языкС Java, послС создания процСсса, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° начинаСтся с ΠΌΠ΅Ρ‚ΠΎΠ΄Π° main(). Π—Π°Ρ‚Π΅ΠΌ, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, Π² Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… программистом мСстах, ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌ ΠΆΠ΅ условий, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.

Π’ языкС Java ΠΏΠΎΡ‚ΠΎΠΊ прСдставляСтся Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° класса Thread. Π­Ρ‚ΠΎΡ‚ класс инкапсулируСт стандартныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ двумя способами:

Бпособ 1

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Thread, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΌΡƒ Π² конструкторС Π½Π΅Ρ‡Ρ‚ΠΎ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ интСрфСйс Runnable. Π­Ρ‚ΠΎΡ‚ интСрфСйс содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄ run(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. ΠŸΠΎΡ‚ΠΎΠΊ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ run().

Для ΠΏΡƒΡ‰Π΅Π³ΠΎ укорочСния ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² конструктор класса Thread ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ бСзымянного Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс Runnable:

Бпособ 2

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° класса Thread ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ run():

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ main() создаСтся ΠΈ запускаСтся Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ послС Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° mSecondThread.start() Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ своё Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π½Π΅ доТидаясь ΠΏΠΎΠΊΠ° ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ. И Ρ‚Π΅ инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄ΡƒΡ‚ послС Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° start(), Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с инструкциями ΠΏΠΎΡ‚ΠΎΠΊΠ° mSecondThread.

Для дСмонстрации ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° спорят Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ философского вопроса Β«Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅, яйцо ΠΈΠ»ΠΈ ΠΊΡƒΡ€ΠΈΡ†Π°?Β». Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±Ρ‹Π»Π° ΠΊΡƒΡ€ΠΈΡ†Π°, ΠΎ Ρ‡Π΅ΠΌ ΠΎΠ½ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ Ρ€Π°Π· Π² сСкунду Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€ΠΎΠ²Π΅Ρ€Π³Π°Ρ‚ΡŒ своСго ΠΎΠΏΠΏΠΎΠ½Π΅Π½Ρ‚Π°. ВсСго спор продлится 5 сСкунд. ΠŸΠΎΠ±Π΅Π΄ΠΈΡ‚ Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ послСдним ΠΈΠ·Ρ€Π΅Ρ‡Π΅Ρ‚ свой ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° этот, Π±Π΅Π· сомнСния, ΠΆΠΈΠ²ΠΎΡ‚Ρ€Π΅ΠΏΠ΅Ρ‰ΡƒΡ‰ΠΈΠΉ философский вопрос. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ срСдства, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΊΠ° Π½Π΅ Π±Ρ‹Π»ΠΎ сказано (isAlive() sleep() ΠΈ join()). К Π½ΠΈΠΌ Π΄Π°Π½Ρ‹ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Ρ‹ дальшС.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ 5 сСкунд выводят ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π° консоль. Π’ΠΎΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Π²Ρ‹ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ послСдним, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. МоТно ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒ, Π½ΠΎ Π΅ΡΡ‚ΡŒ большая Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ запускС Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ «побСдитСля». Π­Ρ‚ΠΎ происходит ΠΈΠ·-Π·Π° Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ «асинхронного выполнСния ΠΊΠΎΠ΄Π°Β». ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ нСльзя ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ какая-Π»ΠΈΠ±ΠΎ инструкция ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, выполнится Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ инструкции Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Или, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ нСзависимы Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅Ρ… случаСв, ΠΊΠΎΠ³Π΄Π° программист сам описываСт зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прСдусмотрСнных для этого срСдств языка.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ процСссов…

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ процСсса ΠΈ Π΄Π΅ΠΌΠΎΠ½Ρ‹

Π’ Java процСсс Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ послСдний Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ. Π”Π°ΠΆΠ΅ Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ main() ΡƒΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ, Π½ΠΎ Π΅Ρ‰Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, систСма Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΡ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ.

Однако это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π΅ относится ΠΊ особому Π²ΠΈΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² – Π΄Π΅ΠΌΠΎΠ½Π°ΠΌ. Если Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ послСдний ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ процСсса, ΠΈ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ-Π΄Π΅ΠΌΠΎΠ½Ρ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ процСсса закончится. Π§Π°Ρ‰Π΅ всСго ΠΏΠΎΡ‚ΠΎΠΊΠΈ-Π΄Π΅ΠΌΠΎΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для выполнСния Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… процСсс Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΆΠΈΠ·Π½ΠΈ.

ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ достаточно просто β€” Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ запуском ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ setDaemon(true) ;
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Π² Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ boolean isDaemon() ;

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π’ Java ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ (сущСствовали) срСдства для ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ частности ΠΌΠ΅Ρ‚ΠΎΠ΄ Thread.stop() Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ послС своСго выполнСния. Однако этот ΠΌΠ΅Ρ‚ΠΎΠ΄, Π° Ρ‚Π°ΠΊΠΆΠ΅ Thread.suspend(), ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈ Thread.resume(), ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π±Ρ‹Π»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ ΠΈ ΠΈΡ… использованиС ΠΎΡ‚Π½Ρ‹Π½Π΅ ΠΊΡ€Π°ΠΉΠ½Π΅ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Β«ΡƒΠ±ΠΈΡ‚Β» Π²ΠΎ врСмя выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΎΠ±Ρ€Ρ‹Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π° полусловС оставит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ состоянии, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ появлСнию Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΈ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅ΠΉ ошибкС.

ВмСсто ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ° примСняСтся схСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ сам отвСтствСнСн Π·Π° своё Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° run(), (main() β€” для Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°) Π»ΠΈΠ±ΠΎ ΠΏΠΎ сигналу ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΊΠ°ΠΊ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ‚Π°ΠΊΠΎΠΉ сигнал β€” Π΄Π΅Π»ΠΎ, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, самого ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² Π΅Π³ΠΎ, ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ вовсС Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. ОписаниС Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° сигнал Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π»Π΅ΠΆΠΈΡ‚ Π½Π° ΠΏΠ»Π΅Ρ‡Π°Ρ… программиста.

Java ΠΈΠΌΠ΅Π΅Ρ‚ встроСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ оповСщСния ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся Interruption (ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ), ΠΈ скоро ΠΌΡ‹ Π΅Π³ΠΎ рассмотрим, Π½ΠΎ сначала посмотритС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΊΡƒ:

Incremenator β€” ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду прибавляСт ΠΈΠ»ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΈΠ· значСния статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Program.mValue. Incremenator содСрТит Π΄Π²Π° Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… поля – mIsIncrement ΠΈ mFinish. Π’ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ дСйствиС выполняСтся, опрСдСляСтся Π±ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ mIsIncrement β€” Ссли ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ true, Ρ‚ΠΎ выполняСтся ΠΏΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, ΠΈΠ½Π°Ρ‡Π΅ β€” Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅. А Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° происходит, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ mFinish становится Ρ€Π°Π²Π½ΠΎ true.

Π’Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° changeAction() (для смСны вычитания Π½Π° слоТСниС ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° finish() (для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°).

Π’ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… mIsIncrement ΠΈ mFinish Π±Ρ‹Π»ΠΎ использовано ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово volatile (ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²Ρ‹ΠΉ, Π½Π΅ постоянный). Π•Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, объявлСнной Π±Π΅Π· volatile, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· этого кэша ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…. ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом volatile ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ для Π½Π΅Ρ‘ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ всС запросы ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ нСпосрСдствСнно Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Однако Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠ° β€” Incremenator провСряСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля mFinish Ρ€Π°Π· Π² сСкунду, поэтому ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ сСкунды Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ finish(), ΠΈ фактичСским Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сигнала ΠΈΠ·Π²Π½Π΅, ΠΌΠ΅Ρ‚ΠΎΠ΄ sleep() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π» своё Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅. Для выполнСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ сцСнария сущСствуСт встроСнноС срСдство оповСщСния ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ называСтся Interruption (ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ).

Interruption

Класс Thread содСрТит Π² сСбС скрытоС Π±ΡƒΠ»Π΅Π²ΠΎ ΠΏΠΎΠ»Π΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ полю mFinish Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Incremenator, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ называСтся Ρ„Π»Π°Π³ΠΎΠΌ прСрывания. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ этот Ρ„Π»Π°Π³ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ interrupt() ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΆΠ΅, установлСн Π»ΠΈ этот Ρ„Π»Π°Π³, ΠΌΠΎΠΆΠ½ΠΎ двумя способами. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ β€” Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ bool isInterrupted() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ bool Thread.interrupted(). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ состояниС Ρ„Π»Π°Π³Π° прСрывания ΠΈ оставляСт этот Ρ„Π»Π°Π³ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ состояниС Ρ„Π»Π°Π³Π° ΠΈ сбрасываСт Π΅Π³ΠΎ. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‡Ρ‚ΠΎ Thread.interrupted() β€” статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ класса Thread, ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° прСрывания Ρ‚ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ позволяСт ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ своё состояниС прСрывания.

Π˜Ρ‚Π°ΠΊ, вСрнСмся ΠΊ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ прСрывания ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с засыпаниСм ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ sleep(), wait() ΠΈ join() Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ β€” Ссли Π²ΠΎ врСмя ΠΈΡ… выполнСния Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ interrupt() этого ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΎΠ½ΠΈ, Π½Π΅ доТидаясь ΠΊΠΎΠ½Ρ†Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания, ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ InterruptedException.

ΠŸΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Incremenator – Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вмСсто Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° finish() Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартный ΠΌΠ΅Ρ‚ΠΎΠ΄ interrupt(). А вмСсто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ„Π»Π°Π³Π° mFinish Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ bool Thread.interrupted();
Π’Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ класс Incremenator послС добавлСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΡ‹ избавились ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° finish() ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной систСмы ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ. Π’ этой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ прСимущСство β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ sleep() Π²Π΅Ρ€Π½Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ (сгСнСрируСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅) Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ послС прСрывания ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ sleep() ΠΈ join() ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹ Π² конструкции try-catch. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ условиС Ρ€Π°Π±ΠΎΡ‚Ρ‹ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΡ… ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ InterruptedException, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ΠΈ Π±Ρ€ΠΎΡΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ Π²ΠΎ врСмя оТидания.

Π‘ запуском ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ, дальшС я расскаТу ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

ΠœΠ΅Ρ‚ΠΎΠ΄ Thread.sleep()

Thread.sleep() β€” статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ класса Thread, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ приостанавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½. Π’ΠΎ врСмя выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sleep() систСма пСрСстаСт Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ процСссорноС врСмя, распрСдСляя Π΅Π³ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄ sleep() ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (миллисСкунды ΠΈΠ»ΠΈ наносСкунды) Π»ΠΈΠ±ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ остановлСн ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ (Π² этом случаС ΠΎΠ½ сгСнСрируСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ InterruptedException).

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ sleep() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² качСствС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания наносСкунды, Π½Π΅ стоит ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ это Π²ΡΠ΅Ρ€ΡŒΠ΅Π·. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… систСмах врСмя оТидания всС Ρ€Π°Π²Π½ΠΎ округляСтся Π΄ΠΎ миллисСкунд Π° Ρ‚ΠΎ ΠΈ Π΄ΠΎ ΠΈΡ… дСсятков.

ΠœΠ΅Ρ‚ΠΎΠ΄ yield()

БтатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Thread.yield() заставляСт процСссор ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² систСмы. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ наступлСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ события ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΅Π³ΠΎ наступлСния происходила ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π°Ρ‰Π΅. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ события ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Thread.yield() Π² Ρ†ΠΈΠΊΠ»:

ΠœΠ΅Ρ‚ΠΎΠ΄ join()

Π’ Java прСдусмотрСн ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ join(). НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Π» Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° myThready, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ myThready.join() Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΊ myThready Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, ΠΌΠ΅Ρ‚ΠΎΠ΄ join() Π²Π΅Ρ€Π½Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΈ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ смоТСт ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

ΠœΠ΅Ρ‚ΠΎΠ΄ join() ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° врСмя оТидания. Π’ этом случаС join() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° закончится врСмя оТидания. Подобно ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Thread.sleep() ΠΌΠ΅Ρ‚ΠΎΠ΄ join ΠΌΠΎΠΆΠ΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ миллисСкунд ΠΈ наносСкунд – Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚Π΅ ΠΆΠ΅.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ задания Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΏΠΎΠΊΠ° Π³Π»Π°Π²Π½Ρ‹ΠΉ (ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ) ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Ρ‘Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎ рСсурсоёмкиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΡ‚ΠΎΠΊ brain (ΠΌΠΎΠ·Π³) Π΄ΡƒΠΌΠ°Π΅Ρ‚ Π½Π°Π΄ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ, ΠΈ прСдполагаСтся, Ρ‡Ρ‚ΠΎ это Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρƒ Π½Π΅Π³ΠΎ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя. Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π΅Ρ‚ Π΅Π³ΠΎ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΡŒ сСкунды ΠΈ, Π² случаС, Ссли этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ€Π°Π·Π΄ΡƒΠΌΡŒΠ΅ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ, обновляСт Β«ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ€Π°Π·Π΄ΡƒΠΌΠΈΠΉΒ» (нСкоторая анимированная ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°). Π’ ΠΈΡ‚ΠΎΠ³Π΅, Π²ΠΎ врСмя Ρ€Π°Π·Π΄ΡƒΠΌΠΈΠΉ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ Π½Π° экранС ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΡ‹ΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π΅ΠΌΡƒ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ элСктронныС ΠΌΠΎΠ·Π³ΠΈ Ρ‡Π΅ΠΌ Ρ‚ΠΎ заняты.

ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π² систСмС ΠΈΠΌΠ΅Π΅Ρ‚ свой ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ – это Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ число Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π±ΠΎΠ»Π΅Π΅ высокоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ больший ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. БистСма Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ выполняСт ΠΏΠΎΡ‚ΠΎΠΊΠΈ с большим ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ с мСньшим ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ процСссорноС врСмя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°ΡŽΡ‚.

Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

void setPriority(int priority) – устанавливаСт ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°.
Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния priority β€” MIN_PRIORITY, NORM_PRIORITY ΠΈ MAX_PRIORITY.

int getPriority() – ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

НСкоторыС ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Thread

Π­Ρ‚ΠΎ практичСски всё. НапослСдок ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

boolean isAlive() β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true Ссли myThready() выполняСтся ΠΈ false Ссли ΠΏΠΎΡ‚ΠΎΠΊ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΈΠ»ΠΈ Π±Ρ‹Π» Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.

setName(String threadName) – Π—Π°Π΄Π°Π΅Ρ‚ имя ΠΏΠΎΡ‚ΠΎΠΊΠ°.
String getName() – ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ имя ΠΏΠΎΡ‚ΠΎΠΊΠ°.
Имя ΠΏΠΎΡ‚ΠΎΠΊΠ° – ассоциированная с Π½ΠΈΠΌ строка, которая Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выполняСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дСйствиС. Иногда это Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ.

static Thread Thread.currentThread() β€” статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½.

long getId() – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ – ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ число, присвоСнноС ΠΏΠΎΡ‚ΠΎΠΊΡƒ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠžΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассказано Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΏΡ€ΠΎ всС Π½ΡŽΠ°Π½ΡΡ‹ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования. И ΠΊΠΎΠ΄Ρƒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, для ΠΏΠΎΠ»Π½ΠΎΠΉ коррСктности Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… нюансов. Π’ частности, Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ синхронизация. Бинхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² β€” Ρ‚Π΅ΠΌΠ°, Π½Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΠ² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ прилоТСния Π½Π΅ получится. ΠŸΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Π½Π΅ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠ½ΠΈΠ³Π΅ Β«Java Concurrency in PracticeΒ» ΠΈΠ»ΠΈ здСсь (всё Π½Π° английском).

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±Ρ‹Π»ΠΈ рассмотрСны основныС срСдства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² Java. Если эта ΡΡ‚Π°Ρ‚ΡŒΡ окаТСтся ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, Ρ‚ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ я расскаТу ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… совмСстного доступа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΊ рСсурсам ΠΈ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

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

ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π² Java. НаслСдуСмся ΠΎΡ‚ Thread, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ интСрфСйс Runnable

Π­Ρ‚ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ я Π½Π°Ρ‡ΠΈΠ½Π°ΡŽ Ρ†ΠΈΠΊΠ» статСй ΠΏΠΎ многопоточности ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΡƒ Π² Java. БСгодня познакомимся с Thread ΠΈ интСрфСйсом Runnable. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Java, Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ понятия.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π² Java

ΠŸΡ€ΠΎΡ†Π΅ΡΡ прСдставляСт собой Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΡƒΡŽ срСду выполнСния ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ прилоТСния. Однако сама ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит нСсколько процСссов Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя. НапримСр, срСда выполнСния Java Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ классы ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Thread Π² Java

Thread ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ лСгковСсным процСсс. Он Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ мСньшС рСсурсов для создания ΠΈ сущСствуСт Π² процСссС, дСля с Π½ΠΈΠΌ рСсурсы.

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Java

КаТдая Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ β€” Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ систСмой, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сигналов ΠΈ Ρ‚.Π΄. Но с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” Π³Π»Π°Π²Π½Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ β€” это Π΄Π²Π° ΠΈ большС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ с одноядСрным процСссором ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, дСля процСссорноС врСмя ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ процСссами ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Java прСдоставляСт Π΄Π²Π° способа ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания Thread. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ интСрфСйс Runnable

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Java класса, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Runnable интСрфСйс.

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

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Thread, Runnable

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ прСдставлСниС ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° нСсколько «лСгковСсных» процСссов (light-weight processes), ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΠΉ доступ ΠΊΠ°ΠΊ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² прилоТСния, Ρ‚Π°ΠΊ ΠΈ ΠΊ ΠΈΡ… полям. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠ° Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° графичСский интСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· основной Β«Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉΒ» ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ΠΈ стартованы.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ привСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° прСдставлСниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² интСрфСйсС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ», ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ обновляСт прогрСсс-Π±Π°Ρ€. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ этот ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«ΠžΡ‚ΠΌΠ΅Π½Π°Β».

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ процСссами

Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ

КаТдоС java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎΡ‚ΠΎΠΊ. ΠŸΠΎΡ‚ΠΎΠΊ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, называСтся Π³Π»Π°Π²Π½Ρ‹ΠΌ. ПослС создания процСсса, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, JVM Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΌΠ΅Ρ‚ΠΎΠ΄Π° main(). Π—Π°Ρ‚Π΅ΠΌ, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ β€” это Π΄Π²Π° ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ с одноядСрным процСссором ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, раздСляя процСссорноС врСмя ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ процСссами ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

Класс Thread

Π’ классС Thread ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ сСмь ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… конструкторов, большоС количСство ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, ΠΈ Ρ‚Ρ€ΠΈ константы (ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ выполнСния ΠΏΠΎΡ‚ΠΎΠΊΠ°).

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ класса Thread

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Runnable ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ своС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ :

Π“Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. НапримСр, нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² выводят Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ всСх Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² поставлСнных Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Π’ этом случаС ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΊΠΎ всСм ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π° Π½Π΅ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Но это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΏΠΎΡ‚ΠΎΠΊΠΈ отнСсСны ΠΊ ΠΎΠ΄Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ создаётся автоматичСски, ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Thread Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° currentThread().

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Thread

НаиболСС часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Thread для управлСния ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ :

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠΎΡ‚ΠΎΠΊΠ°

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Thread ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… основных состояний: Β«Π½ΠΎΠ²Ρ‹ΠΉΒ», «работоспособный», «нСработоспособный» ΠΈ «пассивный». ΠŸΡ€ΠΈ создании ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ состояниС Β«Π½ΠΎΠ²Ρ‹ΠΉΒ» (NEW) ΠΈ Π½Π΅ выполняСтся. Для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈΠ· состояния Β«Π½ΠΎΠ²Ρ‹ΠΉΒ» Π² «работоспособный» (RUNNABLE) слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ start(), Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ run().

ΠŸΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· состояний, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтам статичСски Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ пСрСчислСния Thread.State :

NEW β€” ΠΏΠΎΡ‚ΠΎΠΊ создан, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½;
RUNNABLE β€” ΠΏΠΎΡ‚ΠΎΠΊ выполняСтся;
BLOCKED β€” ΠΏΠΎΡ‚ΠΎΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½;
WAITING β€” ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π΅Ρ‚ окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°;
TIMED_WAITING β€” ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя ΠΆΠ΄Π΅Ρ‚ окончания Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°;
TERMINATED β€” ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Thread

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ChickenEgg рассматриваСтся ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Egg), Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ΄Π΅Ρ‚ спор, Β«Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅, яйцо ΠΈΠ»ΠΈ ΠΊΡƒΡ€ΠΈΡ†Π°?Β». ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ высказываСт своС ΠΌΠ½Π΅Π½ΠΈΠ΅ послС нСбольшой Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ChickenEgg.getTimeSleep(). ΠŸΠΎΠ±Π΅ΠΆΠ΄Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ послСдним Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ своС слово.

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² консоль Π±Ρ‹Π»ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС.

НСвозмоТно Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Π²Ρ‹ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ послСдним. ΠŸΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ запускС Β«ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΒ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ. Π­Ρ‚ΠΎ происходит вслСдствии Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ «асинхронного выполнСния ΠΊΠΎΠ΄Π°Β». ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ обСспСчиваСт Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ выполнСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Или, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ нСзависимы Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случаСв, ΠΊΠΎΠ³Π΄Π° бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ° зависимости выполнСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² опрСдСляСтся прСдусмотрСнными для этого срСдств языка.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Runnable

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Runnable содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ run() :

ΠœΠ΅Ρ‚ΠΎΠ΄ run() выполняСтся ΠΏΡ€ΠΈ запускС ΠΏΠΎΡ‚ΠΎΠΊΠ°. ПослС опрСдСлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Runnable ΠΎΠ½ пСрСдаСтся Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· конструкторов класса Thread.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ класса RunnableExample, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс Runnable

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² консоль Π±Ρ‹Π»ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС.

Бинхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², synchronized

Π’ процСссС функционирования ΠΏΠΎΡ‚ΠΎΠΊΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ рСсурсы прилоТСния, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Если нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² ΠΎΠ±Ρ‰ΠΈΠΉ рСсурс, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСпрСдсказуСмыми. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ :

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΎΠ±Ρ‰ΠΈΠΉ рСсурс Π² Π²ΠΈΠ΄Π΅ класса CommonObject, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ имССтся цСлочислСнноС ΠΏΠΎΠ»Π΅ counter. Π”Π°Π½Π½Ρ‹ΠΉ рСсурс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ классом, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊ CounterThread для увСличСния Π² Ρ†ΠΈΠΊΠ»Π΅ значСния counter Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. ΠŸΡ€ΠΈ стартС ΠΏΠΎΡ‚ΠΎΠΊΠ° полю counter присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ res.counter Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ 4.

Π”Π²Π΅ строчки ΠΊΠΎΠ΄Π° класса CounterThread Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. О Π½ΠΈΡ… Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅.

Π’ Π³Π»Π°Π²Π½ΠΎΠΌ классС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ SynchronizedThread.main запускаСтся ΠΏΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π² Ρ†ΠΈΠΊΠ»Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ res.counter с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π΄ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…; ΠΈ Ρ‚Π°ΠΊ ΠΏΡΡ‚ΡŒ Ρ€Π°Π·. Но Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ Π² консоли, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‹ΠΌ :

Π’ΠΎ Π΅ΡΡ‚ΡŒ, с ΠΎΠ±Ρ‰ΠΈΠΌ рСсурсов res.counter Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ измСняя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ситуации, ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Одним ΠΈΠ· способов синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² связан с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова synchronized. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ synchronized позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ synchronized Π² своих классах опрСдСляя синхронизированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈ. Но нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ synchronized Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ рСсурс ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для этих Ρ†Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ слСдуСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ строчныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² классС CounterThread, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ рСсурс Π±ΡƒΠ΄Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²; ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ освобоТдСния рСсурса. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ синхронизации доступа ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ рСсурсу Ρ€Π΅Π·ΠΊΠΎ измСнится :

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ дСмонстрируСт порядок использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° synchronized для блокирования доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ класса

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ рСсурсам ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ класса. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ имССтся нСсколько экзСмпляров класса DemoClass, Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ demoMethod(), для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠ³Π΄Π° трСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ рСсурсы потокобСзопасными.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Java ΠΈΠΌΠ΅Π΅Ρ‚ ассоциированный с Π½ΠΈΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт своСго Ρ€ΠΎΠ΄Π° инструмСнт для управлСния доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Когда Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° synchronized, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° блокируСтся, прСдоставляя ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ Π±Π»ΠΎΠΊΡƒ ΠΊΠΎΠ΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π» Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. ПослС окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° освобоТдаСтся ΠΈ ΠΎΠ½ становится доступным для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

НСкоторыС Π²Π°ΠΆΠ½Ρ‹Π΅ замСчания использования synchronized

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ : для синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ синхронизации Synchroniser’s ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.util.concurrent.

Взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°

Π‘ использованиСм Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Β«Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒΒ», которая Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстна Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ. Π­Ρ‚ΠΎΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΆΠ΄Π΅Ρ‚ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ освобоТдСния Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌ рСсурса, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ сам Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π» ΠΎΠ΄ΠΈΠ½ ΠΈΠ· рСсурсов, доступа ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΆΠ΄Ρ‘Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Π’ Π΄Π°Π½Π½ΠΎΠΌ процСссС ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ условия возникновСния Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ :

ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² Java, wait ΠΈ notify

ΠŸΡ€ΠΈ взаимодСйствии ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ приостановки ΠΎΠ΄Π½ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ извСщСния ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… дСйствий Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’Π°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, дСйствия ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° зависят ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° дСйствий Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈ Π½Π°Π΄ΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ·Π²Π΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‡Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π»/Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ситуаций ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ :

ВсС эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· синхронизированного контСкста (синхронизированного Π±Π»ΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°).

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Β«ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-Π‘ΠΊΠ»Π°Π΄-ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΒ» (Producer-Store-Consumer). Пока ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ поставит Π½Π° склад ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Π³ΠΎ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ. Допустим ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ 5 Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π°. БоотвСтствСнно ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ вСсь Ρ‚ΠΎΠ²Π°Ρ€ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ. Но, ΠΏΡ€ΠΈ этом, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° складС ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 3 Π΅Π΄ΠΈΠ½ΠΈΡ† Ρ‚ΠΎΠ²Π°Ρ€Π°. ΠŸΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ wait() ΠΈ notify().

Листинг класса Store

Класс Store содСрТит Π΄Π²Π° синхронизированных ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для получСния Ρ‚ΠΎΠ²Π°Ρ€Π° get() ΠΈ для добавлСния Ρ‚ΠΎΠ²Π°Ρ€Π° put(). ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Ρ‚ΠΎΠ²Π°Ρ€Π° выполняСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° счСтчика counter. Если Π½Π° складС Ρ‚ΠΎΠ²Π°Ρ€Π° Π½Π΅Ρ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ counter

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

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

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