Π”ΠΈΠΏΠ»ΠΎΠΌΡ‹, курсовыС, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅...
Брочная ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅

БрСдства Java для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ голодания Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ прямолинСйно ΠΊΠ°ΠΊ Π² ΡΠ»ΡƒΡ‡Π°Π΅ с Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ. Если ситуация ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ с Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ любой ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅ΠΉ состояниС процСссов ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. Π”Π°Π»Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°ΠΌΠΏ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСсто возникновСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Но Π΅ΡΠ»ΠΈ Π² Ρ‚Π°ΠΊΠΎΠΉ ситуации Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

БрСдства Java для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ Π’Π΅ΠΌΠ° курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹: «Π‘рСдства Java для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹».

ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ срСдства ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ произвСсти вычислСния ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΡΡ‚ΠΈ Π·Π°ΠΌΠ΅Ρ€ скорости выполнСния вычислСния для Ρ€Π°Π·Π½ΠΎΠ³ΠΎ количСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Для вычислСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²: любоС;

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²: Π΄Π²Π° (x, y);

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ интСрфСйс Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°;

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ»Π°Π½ дСйствий:

1. ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΎΠ±Π·ΠΎΡ€ срСдств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ многопоточности Π² ΡΠ·Ρ‹ΠΊΠ΅ Java/.

2. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

3. НапишСм ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ сам тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

4. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

5. Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

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

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

1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ (ΠΎΠ±Π·ΠΎΡ€ срСдств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ многопоточности Π² Java).

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

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

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

Рис. 1.

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

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

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

Π’ ΠΊΠΎΠ½Ρ‚Скст ΠΏΠΎΡ‚ΠΎΠΊΠ° входят Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠ°ΠΊ стСк, Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ рСгистров процСссора, адрСс исполняСмой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Ρ‚. Π΄.

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

Рис. 2.

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

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

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

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

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

Бпособ 1.

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

Выглядит это Ρ‚Π°ΠΊ (ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1.):

class SomeThing //НСчто, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ интСрфСйс Runnable.

implements Runnable //(содСрТащСС ΠΌΠ΅Ρ‚ΠΎΠ΄ run ()).

{.

public void run () //Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

{.

System.out.println («ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΈΠ· ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°!»);

}.

}.

public class Program //Класс с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ main ().

{.

static SomeThing mThing; //mThing — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс Runnable.

public static void main (String[] args).

{.

mThing = new SomeThing ();

Thread myThready = new Thread (mThing); //Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° «myThready» .

myThready.start (); //Запуск ΠΏΠΎΡ‚ΠΎΠΊΠ°.

System.out.println («Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½…»);

}.

}.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2.

public class Program //Класс с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ main ().

{.

public static void main (String[] args).

{.

//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Thread myThready = new Thread (new Runnable ().

{.

public void run () //Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

{.

System.out.println («ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΈΠ· ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°!»);

}.

});

myThready.start (); //Запуск ΠΏΠΎΡ‚ΠΎΠΊΠ°.

System.out.println («Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½…»);

}.

}.

Бпособ 2 (ΠŸΡ€ΠΈΠΌΠ΅Ρ€3.).

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

class AffableThread extends Thread.

{.

@Override.

public void run () //Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π² ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

{.

System.out.println («ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΈΠ· ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°!»);

}.

}.

public class Program.

{.

static AffableThread mSecondThread;

public static void main (String[] args).

{.

mSecondThread = new AffableThread (); //Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

mSecondThread.start (); //Запуск ΠΏΠΎΡ‚ΠΎΠΊΠ°.

System.out.println («Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½…»);

}.

}.

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.

class EggVoice extends Thread.

{.

@Override.

public void run ().

{.

for (int i = 0; i < 5; i++).

{.

try{.

sleep (1000); //ΠŸΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° 1 сСкунду.

}catch (InterruptedException e){}.

System.out.println («ΡΠΉΡ†ΠΎ!»);

}.

//Π‘Π»ΠΎΠ²ΠΎ «ΡΠΉΡ†ΠΎ» сказано 5 Ρ€Π°Π·.

}.

}.

public class ChickenVoice //Класс с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ main ().

{.

static EggVoice mAnotherOpinion; //ΠŸΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.

public static void main (String[] args).

{.

mAnotherOpinion = new EggVoice (); //Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

System.out.println («Π‘ΠΏΠΎΡ€ Π½Π°Ρ‡Π°Ρ‚…»);

mAnotherOpinion.start (); //Запуск ΠΏΠΎΡ‚ΠΎΠΊΠ°.

for (int i = 0; i < 5; i++).

{.

try{.

Thread.sleep (1000); //ΠŸΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° 1 сСкунду.

}catch (InterruptedException e){}.

System.out.println («ΠΊΡƒΡ€ΠΈΡ†Π°!»);

}.

//Π‘Π»ΠΎΠ²ΠΎ «ΠΊΡƒΡ€ΠΈΡ†Π°» сказано 5 Ρ€Π°Π·.

if (mAnotherOpinion.isAlive ()) //Если ΠΎΠΏΠΏΠΎΠ½Π΅Π½Ρ‚ Π΅Ρ‰Π΅ Π½Π΅ ΡΠΊΠ°Π·Π°Π» послСднСС слово.

{.

try{.

mAnotherOpinion.join ();//ΠŸΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ° ΠΎΠΏΠΏΠΎΠ½Π΅Π½Ρ‚ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Π²Ρ‹ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ.

}catch (InterruptedException e){}.

System.out.println («ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ появилось яйцо!»);

}.

else //Ссли ΠΎΠΏΠΏΠΎΠ½Π΅Π½Ρ‚ ΡƒΠΆΠ΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» Π²Ρ‹ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ.

{.

System.out.println («ΠŸΠ΅Ρ€Π²ΠΎΠΉ появилась ΠΊΡƒΡ€ΠΈΡ†Π°!»);

}.

System.out.println («Π‘ΠΏΠΎΡ€ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½!»);

}.

}.

Консоль:

Π‘ΠΏΠΎΡ€ Π½Π°Ρ‡Π°Ρ‚…

ΠΊΡƒΡ€ΠΈΡ†Π°!

яйцо!

яйцо!

ΠΊΡƒΡ€ΠΈΡ†Π°!

яйцо!

ΠΊΡƒΡ€ΠΈΡ†Π°!

яйцо!

ΠΊΡƒΡ€ΠΈΡ†Π°!

яйцо!

ΠΊΡƒΡ€ΠΈΡ†Π°!

ΠŸΠ΅Ρ€Π²ΠΎΠΉ появилась ΠΊΡƒΡ€ΠΈΡ†Π°!

Π‘ΠΏΠΎΡ€ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½!

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

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

ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ достаточно просто — Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ запуском ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ setDaemon (true);

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Π² Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ boolean isDaemon ();

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

ВмСсто ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ° примСняСтся схСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ сам отвСтствСнСн Π·Π° ΡΠ²ΠΎΡ‘ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅.

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5.

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

class Incremenator extends Thread.

{.

//О ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌ словС volatile — Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅.

private volatile boolean mIsIncrement = true;

private volatile boolean mFinish = false;

public void changeAction () //ΠœΠ΅Π½ΡΠ΅Ρ‚ дСйствиС Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅.

{.

mIsIncrement = !mIsIncrement;

}.

public void finish () //Π˜Π½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

{.

mFinish = true;

}.

@Override.

public void run ().

{.

do.

{.

if (!mFinish) //ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ.

{.

if (mIsIncrement).

Program.mValue++; //Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚.

else.

Program.mValue—; //Π”Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚.

//Π’Ρ‹Π²ΠΎΠ΄ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

System.out.print (Program.mValue + ««);

}.

else.

return; //Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

try{.

Thread.sleep (1000); //ΠŸΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π° 1 сСк.

}catch (InterruptedException e){}.

}.

while (true);

}.

}.

public class Program.

{.

//ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π°Ρ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Π°Ρ‚ΠΎΡ€

public static int mValue = 0;

static Incremenator mInc; //ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

public static void main (String[] args).

{.

mInc = new Incremenator (); //Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

System.out.print («Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = «);

mInc.start (); //Запуск ΠΏΠΎΡ‚ΠΎΠΊΠ°.

//Π’Ρ€ΠΎΠ΅ΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ дСйствия ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Π°Ρ‚ΠΎΡ€Π°.

//с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ Π² i*2 сСкунд.

for (int i = 1; i <= 3; i++).

{.

try{.

Thread.sleep (i*2*1000); //ОТиданиС Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ i*2 сСк.

}catch (InterruptedException e){}.

mInc.changeAction (); //ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ дСйствия.

}.

mInc.finish (); //Π˜Π½ΠΈΡ†ΠΈΠ°Ρ†ΠΈΡ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

}.

}.

Консоль:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 1 2 1 0 -1 -2 -1 0 1 2 3 4.

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

Π’ ΡΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Однако Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠ° — Incremenator провСряСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля mFinish Ρ€Π°Π· Π² ΡΠ΅ΠΊΡƒΠ½Π΄Ρƒ, поэтому ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ ΡΠ΅ΠΊΡƒΠ½Π΄Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ finish (), ΠΈ Ρ„актичСским Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сигнала ΠΈΠ·Π²Π½Π΅, ΠΌΠ΅Ρ‚ΠΎΠ΄ sleep () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π» своё Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅. Для выполнСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ сцСнария сущСствуСт встроСнноС срСдство оповСщСния ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ называСтся 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 послС добавлСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 6.

class Incremenator extends Thread.

{.

private volatile boolean mIsIncrement = true;

public void changeAction ()//ΠœΠ΅Π½ΡΠ΅Ρ‚ дСйствиС Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅.

{.

mIsIncrement = !mIsIncrement;

}.

@Override.

public void run ().

{.

do.

{.

if (!Thread.interrupted ()) //ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° прСрывания.

{.

if (mIsIncrement) Program. mValue++; //Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚.

else Program. mValue—; //Π”Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚.

//Π’Ρ‹Π²ΠΎΠ΄ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

System.out.print (Program.mValue + ««);

}.

else.

return; //Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

try{.

Thread.sleep (1000);//ΠŸΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π° 1 сСк.

}catch (InterruptedException e){.

return; //Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° послС прСрывания.

}.

}.

while (true);

}.

}.

class Program.

{.

//ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π°Ρ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Π°Ρ‚ΠΎΡ€

public static int mValue = 0;

static Incremenator mInc; //ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

public static void main (String[] args).

{.

mInc = new Incremenator (); //Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

System.out.print («Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = «);

mInc.start (); //Запуск ΠΏΠΎΡ‚ΠΎΠΊΠ°.

//Π’Ρ€ΠΎΠ΅ΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ дСйствия ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Π°Ρ‚ΠΎΡ€Π°.

//с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ Π² i*2 сСкунд.

for (int i = 1; i <= 3; i++).

{.

try{.

Thread.sleep (i*2*1000); //ОТиданиС Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ i*2 сСк.

}catch (InterruptedException e){}.

mInc.changeAction (); //ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ дСйствия.

}.

mInc.interrupt (); //ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

}.

}.

Консоль:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 1 2 1 0 -1 -2 -1 0 1 2 3 4.

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

2. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

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

Thread.sleep () — статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ класса Thread, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ приостанавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½. Π’ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sleep () систСма пСрСстаСт Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ процСссорноС врСмя, распрСдСляя Π΅Π³ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

ΠœΠ΅Ρ‚ΠΎΠ΄ sleep () ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (миллисСкунды ΠΈΠ»ΠΈ наносСкунды) Π»ΠΈΠ±ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ остановлСн ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ (Π² ΡΡ‚ΠΎΠΌ случаС ΠΎΠ½ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ InterruptedException).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 7.

Thread.sleep (1500); //Π–Π΄Π΅Ρ‚ ΠΏΠΎΠ»Ρ‚ΠΎΡ€Ρ‹ сСкунды.

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

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

БтатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Thread. yield () заставляСт процСссор ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² систСмы.

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ наступлСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ события ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΅Π³ΠΎ наступлСния происходила ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π°Ρ‰Π΅.

Π’ ΡΡ‚ΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ события ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Thread. yield () Π² Ρ†ΠΈΠΊΠ»:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 8.

//ОТиданиС поступлСния сообщСния.

while (!msgQueue.hasMessages ()) //Пока Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π΅Ρ‚ сообщСний.

{.

Thread.yield (); //ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ.

}.

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

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

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 9.

Thinker brain = new Thinker (); //Thinker — ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ класса Thread.

brain.start (); //ΠΠ°Ρ‡Π°Ρ‚ΡŒ «ΠΎΠ±Π΄ΡƒΠΌΡ‹Π²Π°Π½ΠΈΠ΅» .

do.

{.

mThinkIndicator.refresh ();//mThinkIndicator — анимированная ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°.

try{.

brain.join (250); //ΠŸΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ окончания мысли Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΡŒ сСкунды.

}catch (InterruptedException e){}.

}.

while (brain.isAlive ()); //Пока brain Π΄ΡƒΠΌΠ°Π΅Ρ‚…

//brain Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» Π΄ΡƒΠΌΠ°Ρ‚ΡŒ (Π·Π²ΡƒΡ‡Π°Ρ‚ ΠΎΠ²Π°Ρ†ΠΈΠΈ).

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

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

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

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 () — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ — ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ число, присвоСнноС ΠΏΠΎΡ‚ΠΎΠΊΡƒ.

Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π³ΠΎΠ»ΠΎΠ΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ запуск.

4. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ БлСдствиСм ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ слоТности ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ являСтся большоС количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ….

4.1 Взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° (deadlock).

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠ³Π΄Π° нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ синхронизации ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ Π΄Ρ€ΡƒΠ³Ρƒ Π΄Ρ€ΡƒΠ³Π°. НапримСр ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π²Π»Π°Π΄Π΅Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ синхронизации, Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠΈ которая ΡƒΠΆΠ΅ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π°. Π­Ρ‚ΠΎ происходит ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ порядка Π·Π°Ρ…Π²Π°Ρ‚Π° Ρ‚ΠΎΡ‡Π΅ΠΊ синхронизации, Ρ‡Ρ‚ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Данная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько способов Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: автоматичСскоС Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΡ€ΠΈΠ½ΡΡ‚ΠΈΠ΅ ΠΌΠ΅Ρ€ ΠΏΠΎ Π΅Ρ‘ ΡƒΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ, Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ синхронизации Π±Π΅Π· постоянной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π·Π°Ρ…Π²Π°Ρ‚Π°, Тёстко Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ порядок Π·Π°Ρ…Π²Π°Ρ‚Π°. НуТно ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Π° для любого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° синхронизации ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ навсСгда. Рассмотрим ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10.

public class DeadLock {.

public static void main (String[] args) {.

final ReentrantLock lock1 = new ReentrantLock ();

final ReentrantLock lock2 = new ReentrantLock ();

Thread t = new Thread (new Runnable () {.

@Override.

public void run () {.

lock1.lock ();

delay ();

lock2.lock ();

try {.

//критичСская сСкция.

}.

finally {.

lock1.unlock ();

lock2.unlock ();

}.

}.

}, «slave»);

t.start ();

lock2.lock ();

delay ();

lock1.lock ();

try {.

//критичСская сСкция.

}.

finally {.

lock2.unlock ();

lock1.unlock ();

}.

System.out.println («finished»);

}.

/**.

* Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π° 1 сСкунду.

*/.

public static void delay () {.

try {.

Thread.sleep (1000);

} catch (InterruptedException e) {.

e.printStackTrace ();

}.

}.

}.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° прСдставлСнного Π²Ρ‹ΡˆΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ Π½Π° ΡΠΊΡ€Π°Π½ строки «finished». ΠŸΠΎΡ‚ΠΎΠΊΠΈ main ΠΈ slave Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ навсСгда послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ lock1, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ lock2. Π’ Ρ‚Π°ΠΊΠΎΠΌ малСньком Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π·Π°ΠΈΠΌΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ просто посмотрСв листинг. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° получаСтся это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° ΡΡ‚Π°ΠΏΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (хотя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°), поэтому Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ дСтСктирования Ρ‚Π°ΠΊΠΈΡ… ситуаций Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния. НаиболСС ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ являСтся изучСния Π΄Π°ΠΌΠΏΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ jstack, Π»ΠΈΠ±ΠΎ послав сигнал выполняСмому процСссу (для консольного windows прилоТСния Ctrl+Break, Π² linux сигнал SIGQUIT). Для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°ΠΌΠΏΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ прСдставлСнному Π½ΠΈΠΆΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11.

Found one Java-level deadlock:

=============================.

" slave" :

waiting for ownable synchronizer 0×2299c870,.

(a java.util.concurrent.locks.ReentrantLock$NonfairSync),.

which is held by «main» .

" main" :

waiting for ownable synchronizer 0×2299c848,.

(a java.util.concurrent.locks.ReentrantLock$NonfairSync),.

which is held by «slave» .

Java stack information for the threads listed above:

===================================================.

" slave" :

at sun.misc.Unsafe.park (Native Method).

— parking to wait for <0×2299c870>

(a java.util.concurrent.locks.ReentrantLock$NonfairSync).

at java.util.concurrent.locks.LockSupport.park (Unknown Source).

… ΠΎΠΏΡƒΡ‰Π΅Π½Π° Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π° нСсущСствСнная Π² ΠΊΠΎΠ½Ρ‚СкстС обсуТдСния.

at java.lang.Thread.run (Unknown Source).

" main" :

at sun.misc.Unsafe.park (Native Method).

— parking to wait for <0×2299c848>

(a java.util.concurrent.locks.ReentrantLock$NonfairSync).

at java.util.concurrent.locks.LockSupport.park (Unknown Source).

… ΠΎΠΏΡƒΡ‰Π΅Π½Π° Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π° нСсущСствСнная Π² ΠΊΠΎΠ½Ρ‚СкстС обсуТдСния.

at kz.pnhz.test.sandbox.DeadLock.main (DeadLock.java:31).

Found 1 deadlock.

… ΠΎΠΏΡƒΡ‰Π΅Π½Π° Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π° нСсущСствСнная Π² ΠΊΠΎΠ½Ρ‚СкстС обсуТдСния Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π₯отя deadlock часто выявляСтся Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ возникновСния это ошибка проСктирования ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Π½Π° ΡΡ‚Π°ΠΏΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

4.2. Π“ΠΎΠ»ΠΎΠ΄Π°Π½ΠΈΠ΅ (starvation).

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΠ»Π½ΠΎΠΉ нСдоступности рСсурсов ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π² ΡΠ²ΡΠ·ΠΈ с ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. ΠœΠΎΠΆΠ΅Ρ‚ проявляСтся ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ планирования выполнСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°Ρ… Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… систСмах), Π»ΠΈΠ±ΠΎ Π±ΠΎΠ»Π΅Π΅ частый случай — ошибки ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Если Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ выставлСн ΠΎΡ‡Π΅Π½ΡŒ высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Π° Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π½ΠΈΠ·ΠΊΠΈΠΉ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ всС Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы, Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΈΡ… Π²ΠΎΠ²ΡΠ΅. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Java. Π’ Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ ошибки ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ приводящиС ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ голодания Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹. НапримСр ошибка Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ условия Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΡ€ΠΈ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12.

public class Starvation {.

public static void main (String[] args) {.

final ReentrantLock lock1 = new ReentrantLock ();

Thread t = new Thread (new Runnable () {.

@Override.

public void run () {.

delay ();//рСализация Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° DeadLock.

lock1.lock ();

try {.

//критичСская сСкция.

System.out.println («completed»);

}.

finally {.

lock1.unlock ();

}.

}.

}, «slave»);

t.start ();

lock1.lock ();

try {.

while (!Thread.currentThread ().isInterrupted ()) {.

//условиС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ Π½Π°ΡΡ‚ΡƒΠΏΠ°Π΅Ρ‚.

}.

}.

finally {.

lock1.unlock ();

}.

System.out.println («finished»);

}.

}.

Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ голодания Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ прямолинСйно ΠΊΠ°ΠΊ Π² ΡΠ»ΡƒΡ‡Π°Π΅ с Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ. Если ситуация ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ с Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ любой ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅ΠΉ состояниС процСссов ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. Π”Π°Π»Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°ΠΌΠΏ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСсто возникновСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Но Π΅ΡΠ»ΠΈ Π² Ρ‚Π°ΠΊΠΎΠΉ ситуации Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ события ΠΈΠ»ΠΈ просто ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΡƒ (Thread.yield, Thread. sleep) ΡƒΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ²Π°Π½Ρ‚, Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Ρ‘ Π±ΡƒΠ΄Π΅Ρ‚ слоТнСС. ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… условиях ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ наблюдСниС Π·Π° ΡΡ‚Π΅ΠΊΠ°ΠΌΠΈ выполнСния ΠΈ ΡΠΎΡΡ‚ояниями ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΈ Π°Π²Ρ‚оматичСскоС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ прилоТСния (ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя сбора статистики).

4.3 Активная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° (livelock).

Π­Ρ‚ΠΎ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ взаимодСйствия состояниСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ нСзависимо ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈΠ·Π²Π½Π΅. УсловиС сущСствованиС измСняСмого ΠΈΠ·Π²Π½Π΅ состояния — ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, взаимодСйствиС процСссов с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой). ΠŸΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ся, Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ дСйствиС, Π½ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибки ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ повторяСт Π΅Π³ΠΎ снова. НапримСр Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π‘Π£Π‘Π”, которая Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ сСрвСра, Π½ΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΊΠ°ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ ΠΏΡ‹Ρ‚аСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ классичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡ‚ΠΈ сСтСвых Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. Если Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΡ… устройства ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ коллизию ΠΈ ΠΏΠΎΠ²Ρ‚оряя ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π²Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎ устройство Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· раздСляСмая срСда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сигналы Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… источников.

Помимо Ρ‚Π°ΠΊΠΈΡ… явных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ упомянутыС Π²Ρ‹ΡˆΠ΅ Π² ΡΡ‚ΠΎΠΉ сСкции, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π»Π°Ρ‚Снтности (Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ). НавСрноС, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённым ΠΈΡ… Π²ΠΈΠ΄ΠΎΠΌ, связанным с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° со ΡΠ»Π°Π±ΠΎ Π³Ρ€Π°Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (coarse-grained lock) ΠΈΠ»ΠΈ ΠΈΡ… ΡΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ — Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (global lock). Π‘ΡƒΡ‚ΡŒ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сводится ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² критичСской сСкции Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡ‚ΠΎΠΌ участкС фактичСски сСриализуСтся (смотри 2.4 Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ). К ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ латСнтности ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π±Π»ΠΈΠ·ΠΊΡƒΡŽ ΠΊ Π³ΠΎΠ»ΠΎΠ΄Π°Π½ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ практичСски Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ врСмя Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠΉ рСсурс, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ растягиваСтся врСмя выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠ±Π·ΠΎΡ€Π΅ описываСтся, хотя Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎ, большая Ρ‡Π°ΡΡ‚ΡŒ основных вопросов связанных с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π² Java. НадСюсь, ΠΌΠ½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ аспСкты этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎΠΌ для понимания объСмС.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ описанныС процСссы ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Π½ΠΎ ΠΌΠ½Π΅ Π½Π΅Ρ‚ нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ описанныС Π² ΠΎΠ±Π·ΠΎΡ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡Π° стоит Π² ΠΎΡ†Π΅Π½ΠΊΠ΅ быстродСйствия вычислСнии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ использовании Ρ€Π°Π·Π½ΠΎΠ³ΠΎ количСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Богласно этому Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ напишСм тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π½ΠΈΠΆΠ΅.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1.

import javax. swing.*; //ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠΊΠ½Π° //Π½Π° экран.

public class Vine {.

static int x=0,y=0,z=1; //инициализация ΠΎΠ±Ρ‰ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² //Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

//**********************************подсчСт c ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ многопоточности.

public static class ThreadTest implements Runnable {.

long before1=0;long after1=0; //ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ подсчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

public void run () {.

double calc; //пСрСмСнная подсчСта Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊ //Ρ†ΠΈΠΈ.

before1 = System. currentTimeMillis (); //установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Ρ€Π΅ //ΠΌΠ΅Π½ΠΈ «Π΄ΠΎ».

for (int i=0; i<5000; i++) {.

//подсчСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

calc =(Math.sin (i*y)*Math.cos (z*2))+(Math.cos (i*y)*Math.sin (2*z));

//условиС Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΡΠΊΡ€Π°Π½ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒ //Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ значСния.

if (i%1000==0) { //условиС Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆ. Π·Π½Π°Ρ‡.

after1=System.currentTimeMillis (); //установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Ρ€Π΅ //ΠΌΠ΅Π½ΠΈ «ΠΏΠΎΡΠ»Π΅».

//Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ //значСния.

System.out.format («%s count %d fixing %.4f time %d msn», getName (),(i/1000), calc,(after1-before1));

}.

}.

}.

}.

public static String getName () {.

return Thread. currentThread ().getName (); //Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

}.

//*********************************подсчСт Π±Π΅Π· использования многопоточности.

public static void free () {.

long before2=0;long after2=0; //ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ подсчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

before2= System. currentTimeMillis (); //установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Ρ€Π΅ //ΠΌΠ΅Π½ΠΈ «Π΄ΠΎ».

double calc; //пСрСмСнная подсчСта Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊ //Ρ†ΠΈΠΈ.

for (int i=0; i<5000; i++) {.

//подсчСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

calc =(Math.sin (i*y)*Math.cos (z*2))+(Math.cos (i*y)*Math.sin (2*z));

if (i%1000==0) { //условиС Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆ. Π·Π½Π°Ρ‡.

after2=System.currentTimeMillis (); //установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Ρ€Π΅ //ΠΌΠ΅Π½ΠΈ «ΠΏΠΎΡΠ»Π΅».

//Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ //значСния.

System.out.format («count %d fixing: %.4f time %d msn» ,(i/1000), calc,(after2-before2));

}.

}.

}.

public static void main (String[] args) { //функция main ().

//Π²Ρ‹Π²ΠΎΠ΄ запроса Π½Π° ΡΠΊΡ€Π°Π½.

String input_x = JOptionPane. showInputDialog («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²:»);

x = Integer. parseInt (input_x); //считываниС значСния Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

//Π²Ρ‹Π²ΠΎΠ΄ запроса Π½Π° ΡΠΊΡ€Π°Π½.

String input_y = JOptionPane. showInputDialog («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ A:») ;

y = Integer. parseInt (input_y); //считываниС значСния Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

//Π²Ρ‹Π²ΠΎΠ΄ запроса Π½Π° ΡΠΊΡ€Π°Π½.

String input_z = JOptionPane. showInputDialog («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ B:») ;

z = Integer. parseInt (input_z); //считываниС значСния Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

//Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒ тСкста.

System.out.format («<Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· использования многопоточности>n»);

free (); //Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ подсчСта значСния //Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· многопоточности.

//Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒ тСкста.

System.out.format («<Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ c ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ многопоточности>n»);

// ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Thread t[] = new Thread[x];

for (int i=0; i<t.length; i++) {.

t[i]=new Thread (new ThreadTest ()," Thread «+i);

}.

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

for (int i=0; i<t.length; i++) {.

t[i]. start ();

System.out.format («%s <starter> n», t[i]. getName ());

}.

System. exit (0); //Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

}.

}.

ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 1.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

<Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· использования многопоточности>

count 0 fixing: 0,9093 time 0 ms.

count 1 fixing: 0,9974 time 16 ms.

count 2 fixing: 0,5394 time 16 ms.

count 3 fixing: -0,9384 time 16 ms.

count 4 fixing: 0,5476 time 31 ms.

<Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ c ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ многопоточности>

Thread 0 <starter>

Thread 1 <starter>

Thread 2 <starter>

Thread 2 count 0 fixing 0,9093 time 0 ms.

Thread 2 count 1 fixing 0,9974 time 47 ms.

Thread 2 count 2 fixing 0,5394 time 47 ms.

Thread 2 count 3 fixing -0,9384 time 47 ms.

Thread 1 count 0 fixing 0,9093 time 0 ms.

Thread 1 count 1 fixing 0,9974 time 62 ms.

Thread 1 count 2 fixing 0,5394 time 62 ms.

Thread 1 count 3 fixing -0,9384 time 62 ms.

Thread 1 count 4 fixing 0,5476 time 78 ms.

Thread 3 <starter>

Thread 4 <starter>

Thread 0 count 0 fixing 0,9093 time 0 ms.

Thread 0 count 1 fixing 0,9974 time 78 ms.

Thread 0 count 2 fixing 0,5394 time 78 ms.

Thread 0 count 3 fixing -0,9384 time 94 ms.

Thread 0 count 4 fixing 0,5476 time 94 ms.

Thread 2 count 4 fixing 0,5476 time 109 ms.

Thread 3 count 0 fixing 0,9093 time 0 ms.

Thread 3 count 1 fixing 0,9974 time 0 ms.

Thread 3 count 2 fixing 0,5394 time 16 ms.

Thread 3 count 3 fixing -0,9384 time 16 ms.

Thread 3 count 4 fixing 0,5476 time 16 ms.

Thread 4 count 0 fixing 0,9093 time 0 ms.

Thread 4 count 1 fixing 0,9974 time 0 ms.

Thread 4 count 2 fixing 0,5394 time 0 ms.

Thread 4 count 3 fixing -0,9384 time 16 ms.

Thread 4 count 4 fixing 0,5476 time 16 ms.

Анализ: Богласно Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ 1. Π²ΠΈΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ вычислСния происходит Π·Π° 31 мс, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈ использовании разбиСния Π½Π° 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ 0,1 ΠΈ 2 ΠΏΠΎΡ‚ΠΎΠΊ слишком сильно Π·Π°ΠΏΠ°Π·Π΄Ρ‹Π²Π°ΡŽΡ‚, Π° Π²ΠΎΡ‚ 3 ΠΈ 4 ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ вычислСния Π·Π° 16 мс. Π’Π°ΠΊΠΎΠ΅ Π·Π°ΠΏΠ°Π·Π΄Ρ‹Π²Π°Π½ΠΈΠ΅ я ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽ с Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ процСссора Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ процСссами.

Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ Π΅Ρ‰Π΅ ΠΏΠ°Ρ€Ρƒ тСстов с Π΄Ρ€ΡƒΠ³ΠΈΠΌ количСством ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 2.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ 3 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

<Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· использования многопоточности>

count 0 fixing: 0,9093 time 0 ms.

count 1 fixing: 0,9974 time 15 ms.

count 2 fixing: 0,5394 time 62 ms.

count 3 fixing: -0,9384 time 62 ms.

count 4 fixing: 0,5476 time 62 ms.

<Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ c ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ многопоточности>

Thread 0 <starter>

Thread 1 <starter>

Thread 0 count 0 fixing 0,9093 time 0 ms.

Thread 0 count 1 fixing 0,9974 time 0 ms.

Thread 0 count 2 fixing 0,5394 time 16 ms.

Thread 0 count 3 fixing -0,9384 time 16 ms.

Thread 0 count 4 fixing 0,5476 time 16 ms.

Thread 1 count 0 fixing 0,9093 time 0 ms.

Thread 1 count 1 fixing 0,9974 time 0 ms.

Thread 1 count 2 fixing 0,5394 time 0 ms.

Thread 1 count 3 fixing -0,9384 time 0 ms.

Thread 1 count 4 fixing 0,5476 time 16 ms.

Thread 2 <starter>

Thread 2 count 0 fixing 0,9093 time 0 ms.

Thread 2 count 1 fixing 0,9974 time 15 ms.

Thread 2 count 2 fixing 0,5394 time 15 ms.

Thread 2 count 3 fixing -0,9384 time 15 ms.

Thread 2 count 4 fixing 0,5476 time 15 ms.

Богласно Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ 2. Π²ΠΈΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ вычислСния происходит Π·Π° 62 мс, Ссли Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ этот Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² ΡΠ²ΡΠ·ΠΊΠ΅ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ, Ρ‚ΠΎ Π²ΠΈΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ, ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ вычислСниС, происходит Π·Π° Ρ€Π°Π·Π½ΠΎΠ΅ врСмя. Π”Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ вычислСния, Π²Π»ΠΈΡΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сторонниС процСссы, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ использованиС Π½Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° подсчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. НС Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ‚ Π½Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π²ΠΈΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании разбиСния Π½Π° 3 ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости вычислСния, всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π·Π°Π΄Π°Ρ‡Ρƒ Π·Π° 16 мс.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 3.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ 10 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

<Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· использования многопоточности>

count 0 fixing: 0,9093 time 0 ms.

count 1 fixing: 0,9974 time 16 ms.

count 2 fixing: 0,5394 time 16 ms.

count 3 fixing: -0,9384 time 31 ms.

count 4 fixing: 0,5476 time 31 ms.

<Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ c ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ многопоточности>

Thread 0 <starter>

Thread 1 <starter>

Thread 0 count 0 fixing 0,9093 time 0 ms.

Thread 0 count 1 fixing 0,9974 time 0 ms.

Thread 0 count 2 fixing 0,5394 time 0 ms.

Thread 0 count 3 fixing -0,9384 time 0 ms.

Thread 0 count 4 fixing 0,5476 time 16 ms.

Thread 1 count 0 fixing 0,9093 time 0 ms.

Thread 1 count 1 fixing 0,9974 time 0 ms.

Thread 1 count 2 fixing 0,5394 time 15 ms.

Thread 1 count 3 fixing -0,9384 time 15 ms.

Thread 1 count 4 fixing 0,5476 time 15 ms.

Thread 2 <starter>

Thread 3 <starter>

Thread 4 <starter>

Thread 5 <starter>

Thread 6 <starter>

Thread 7 <starter>

Thread 2 count 0 fixing 0,9093 time 0 ms.

Thread 2 count 1 fixing 0,9974 time 0 ms.

Thread 2 count 2 fixing 0,5394 time 0 ms.

Thread 2 count 3 fixing -0,9384 time 16 ms.

Thread 2 count 4 fixing 0,5476 time 16 ms.

Thread 3 count 0 fixing 0,9093 time 0 ms.

Thread 3 count 1 fixing 0,9974 time 0 ms.

Thread 3 count 2 fixing 0,5394 time 15 ms.

Thread 3 count 3 fixing -0,9384 time 15 ms.

Thread 3 count 4 fixing 0,5476 time 15 ms.

Thread 4 count 0 fixing 0,9093 time 0 ms.

Thread 4 count 1 fixing 0,9974 time 16 ms.

Thread 4 count 2 fixing 0,5394 time 16 ms.

Thread 4 count 3 fixing -0,9384 time 16 ms.

Thread 8 <starter>

Thread 9 <starter>

Thread 7 count 0 fixing 0,9093 time 0 ms.

Thread 7 count 1 fixing 0,9974 time 0 ms.

Thread 7 count 2 fixing 0,5394 time 0 ms.

Thread 7 count 3 fixing -0,9384 time 0 ms.

Thread 7 count 4 fixing 0,5476 time 16 ms.

Thread 6 count 0 fixing 0,9093 time 0 ms.

Thread 6 count 1 fixing 0,9974 time 16 ms.

Thread 6 count 2 fixing 0,5394 time 16 ms.

Thread 6 count 3 fixing -0,9384 time 32 ms.

Thread 6 count 4 fixing 0,5476 time 32 ms.

Thread 4 count 4 fixing 0,5476 time 63 ms.

Thread 8 count 0 fixing 0,9093 time 0 ms.

Thread 8 count 1 fixing 0,9974 time 0 ms.

Thread 8 count 2 fixing 0,5394 time 0 ms.

Thread 8 count 3 fixing -0,9384 time 16 ms.

Thread 8 count 4 fixing 0,5476 time 16 ms.

Thread 5 count 0 fixing 0,9093 time 0 ms.

Thread 5 count 1 fixing 0,9974 time 63 ms.

Thread 5 count 2 fixing 0,5394 time 79 ms.

Thread 5 count 3 fixing -0,9384 time 79 ms.

Thread 5 count 4 fixing 0,5476 time 79 ms.

Thread 9 count 0 fixing 0,9093 time 0 ms.

Thread 9 count 1 fixing 0,9974 time 0 ms.

Thread 9 count 2 fixing 0,5394 time 0 ms.

Thread 9 count 3 fixing -0,9384 time 0 ms.

Thread 9 count 4 fixing 0,5476 time 16 ms.

Анализ: Богласно Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ 3. Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ вычислСния происходит Π·Π° 31 мс, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈ использовании разбиСния Π½Π° 10 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ 4,5 ΠΈ 6 ΠΏΠΎΡ‚ΠΎΠΊ слишком сильно Π·Π°ΠΏΠ°Π·Π΄Ρ‹Π²Π°ΡŽΡ‚, Π° Π²ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ вычислСния Π·Π° 16 мс Ρ‡Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния вычислСния.

Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π°Π½Π°Π»ΠΈΠ·ΠΎΠ² тСстирования Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹:

1. НСобходимо ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ подсчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π»ΠΈ ΠΈΠ· ΠΏΠΎΠ΄ΡΡ‡Π΅Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ врСмя ΠΎΡ‚Π²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ процСссором Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов.

2. НСобходимо ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ большСС количСство тСстов для большСй достовСрности Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠ΅Π³ΠΎ количСства Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

3. НСобходимо ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹ для увСличСния быстродСйствия, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для этого ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

Π’Π°Π±Π»ΠΈΡ†Π° 1.

Π€Π°ΠΊΡ‚ΠΎΡ€

ОписаниС.

Как ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ/ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ?

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ сдСлано для Π΅Π΅ ΡƒΡΡ‚ранСния?

Π˜Π·Π΄Π΅Ρ€ΠΆΠΊΠΈ запуска Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ΠžΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Π°Ρ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ΄Π°. НС ΠΈΠΌΠ΅Π΅Ρ‚ значСния для большСй части ΠΊΠΎΠ΄Π°. ΠšΠΎΠΌΠΏΠΎΠ½ΡƒΠ΅Ρ‚ΡΡ с Π·Π°ΠΏΡƒΡΠΊΠΎΠΌ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части прилоТСния.

Π—Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ΄Π° ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ врСмя выполнСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прилоТСния с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ.

НС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ НС ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ настройкС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ.

Π˜Π·Π΄Π΅Ρ€ΠΆΠΊΠΈ запуска ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ВрСмя создания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠžΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ связанныС с Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π˜Π·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ нСсколько ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅;

Для компСнсации этой ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Ρ†ΠΈΠΊΠ»Ρ‹ Π±ΠΎΠ»Π΅Π΅ высокого уровня ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹.

Π˜Π·Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ (ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π°).

ВрСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ многопоточности Π½Π° Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ.

ΠŸΡ€ΠΎΠ²Π΅ΡΡ‚ΠΈ измСрСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΊΠΎΠ΄Π΅, зависящСм ΠΎΡ‚ Π±Ρ‹ΡΡ‚родСйствия, ΠΈΠ»ΠΈ Π½Π΅Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ΅ Π·Π°Π΄Π°Ρ‡; см. Π½ΠΈΠΆΠ΅.

ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅;

Π˜Π·Π΄Π΅Ρ€ΠΆΠΊΠΈ управлСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ.

ВрСмя, ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Π² Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…. Иногда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ эталонном тСстировании ΠΈ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ.

ΠŸΠΎΠ½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° Ρ‡Π°ΡΡ‚Ρ‹ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ инструмСнта, ΠΊΠ°ΠΊ VTune Performance Analyzer. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π² ΠΊΠΎΠ΄Π΅, отягощСнном Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ;

Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ для сокращСния ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ;

Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅, исправлСния согласно ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌ ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1 Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эта Π·Π°Π΄Π°Ρ‡Π° Π² ΠΏΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ ΡΡ‚Π°Π²ΠΈΠ»Π°ΡΡŒ.

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ исслСдования Π² ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ являСтся БрСдства Java для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

ЦСлью Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ срСдства ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ произвСсти вычислСния ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΡΡ‚ΠΈ Π·Π°ΠΌΠ΅Ρ€ скорости выполнСния вычислСния для Ρ€Π°Π·Π½ΠΎΠ³ΠΎ количСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° рСализованная Π² ΡΡ€Π΅Π΄Π΅ java eclipse с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ класса java.lang.Thread, интСрфСйса Runnable, содСрТащий ΠΌΠ΅Ρ‚ΠΎΠ΄ run (), дСмонстрируСт возмоТности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

1. ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½ ΠΎΠ±Π·ΠΎΡ€ срСдств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ многопоточности Π² ΡΠ·Ρ‹ΠΊΠ΅ Java.

2. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

3. Богласно Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ написан ΠΈ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ тСкст.

4. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

По Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² врСмя Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сокращаСтся, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ процСссора, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ± ΡΡ„фСктивности Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π° Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΏΡ€ΠΈ использовании срСдств ΠΌΠ½ΠΎΠ³ΠΎ поточности. Π’Π²ΠΈΠ΄Ρƒ ограничСнности задания рСализация ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚рация возмоТностСй Π΄Ρ€ΡƒΠ³ΠΈΡ… классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅ Π±Ρ‹Π»Π° прСдусмотрСна.

Allbest.ur.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ