Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

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

  • Monitor — высокоуровнСвый ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ взаимодСйствия ΠΈ синхронизации процСссов, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ доступ ΠΊ нСраздСляСмым рСсурсам.

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

    • Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для синхронизации ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ для синхронизации Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСссов ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
  • Mutex — Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ сСмафор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… состояний: ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠΌ. Он отличаСтся ΠΎΡ‚ сСмафора Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π»Π°Π΄Π΅ΡŽΡ‰ΠΈΠΉ ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Π³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ, Ρ‚.

    Π΅. пСрСвСсти Π² ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ΅ состояниС.

    • Π—Π°Π΄Π°Ρ‡Π° ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° β€” Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚ доступа ΠΊ Π½Π΅ΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π²Π»Π°Π΄Π΅Π» ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠΌ.
    • Π’ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»Π°Π΄Π΅Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΌ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠΌ.
    • Если Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ΅Π½ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠΉ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠΌ, Ρ‚ΠΎ этот ΠΏΠΎΡ‚ΠΎΠΊ блокируСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ освобоТдён.
  • Reentrant mutex — ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π»ΠΎΡ‡Π΅Π½ нСсколько Ρ€Π°Π· ΠΎΠ΄ΠΈΠ½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ процСссом/ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π±Π΅Π· создания Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

  • Lock — Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ синхронизации, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ достп ΠΊ раздСляСмому рСсурсу ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

    • Мягкая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° — ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΠ΅Ρ€Π΅Π΄ доступом ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ раздСлямому рСсурсу.
    • ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° — ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° нСсанкционированного доступа ΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ рСсурсу Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π°, Ρ‡Π΅Ρ€Π΅Π· созданиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пытался ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ.
  • Spinlock — Ρ‚ΠΈΠΏ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заставляСт ΠΏΠΎΡ‚ΠΎΠΊ Π² бСсконСчном Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅.

    • Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ остаСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Π½ΠΎ Π½Π΅ выполянСт ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‚ΠΎ использованиС Π΄Π°Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ эффСктивно.
  • Deadlock — Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ нСсколько процСссов находятся Π² состоянии бСсконСчного оТидания рСсурсов, занятых самими этими процСссами.

  • Livelock — Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ нСсколько процСссов находятся Π² состоянии бСсконСчного зацикливания ΠΈ Π½Π΅ производят ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

  • Process — процСсс ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ срСдой выполнСния.

    • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс, Π² частности, ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти.
    • ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ воспринимаСтся, ΠΊΠ°ΠΊ синоним Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ прилоТСния. Однако Π±Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° прилоТСния Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ нСсколько процСссов.
    • Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ JVM Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ процСссС.
    • Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ProcessBuilder ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  • Thread — ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ лСгковСсными процСссами (lightweight processes). ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса — ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

    • ΠŸΠΎΡ‚ΠΎΠΊΠΈ дСлят рСсурсы процСсса, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.
    • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Π½ΠΎ всСгда сущСствуСт СдинствСнный «Π³Π»Π°Π²Π½Ρ‹ΠΉ» ΠΏΠΎΡ‚ΠΎΠΊ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ запускаСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  • Interrupt — ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ являСтся ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ½Π΅Π½ΠΈΠ΅.

  • Join — позволяСт ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ выполнСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

  • Thread safe — участок ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΊΠ°ΠΊ Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС.

    • Not thread safe — участок ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС.
  • Thread affinity — ΠΏΡ€ΠΈ стартС ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ срСдС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊ Π±Ρ‹Π» привязан ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ядру.

  • EDT (Event Dispatching Thread) — ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ событий. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ являСтся ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΎΠΌ событийно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

    • Π’Π°ΠΊΠΈΠ΅ GUI Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, AWT ΠΈΠ»ΠΈ Swing, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ EDT.
  • Race condition — ошибка проСктирования ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ систСмы ΠΈΠ»ΠΈ прилоТСния, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π° систСмы ΠΈΠ»ΠΈ прилоТСния зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ части ΠΊΠΎΠ΄Π°.

  • Context switches — ΠΊΠΎΠ³Π΄Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ приостанавливаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.

    • ЧастоС явлСниС Π² прилоТСниях с ΠΊΡƒΡ‡Π΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠΌ обходится ΠΈΠ·-Π·Π°:
    • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ восстановлСниС выполняСмого контСкста
    • НСпостоянноС мСстополоТСниС Π² памяти
    • Π—Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ CPU Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΠΈΡ… использованиС.
  • Atomic action (Атомарная опСрация) — опСрация, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°ΡΡΡ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅, Π»ΠΈΠ±ΠΎ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°ΡΡΡ вовсС.

    • Атомарная опСрация Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π°: ΠΎΠ½Π° Π»ΠΈΠ±ΠΎ выполняСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΠ±ΡŽ, Π»ΠΈΠ±ΠΎ Π½Π΅ выполняСтся вовсС.
    • Атомарная опСрация Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ внСшнСй срСды Π²ΠΎ врСмя выполнСния, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ.
    • Атомарная опСрация ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° влиянию Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.
  • Happened-before relationship — ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ «Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ся ΠΏΡ€Π΅ΠΆΠ΄Π΅» Π΄Π²ΡƒΡ… событий, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ, записанная событиСм A Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½Π° для события B, Ρ‚.Π΅. событиС А Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свою запись ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ B Π½Π°Ρ‡Π½Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

    • Π”Π°Π½Π½ΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎ, иррСфлСксивно, антисиммСтрично.
    • Π’Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎ — для Π»ΡŽΠ±Ρ‹Ρ… 3-Ρ… событий a, b, c, Ссли событиС a происходит ΠΏΠ΅Ρ€Π΅Π΄ b, ΠΈ b происходит ΠΏΠ΅Ρ€Π΅Π΄ c, Ρ‚ΠΎΠ³Π΄Π° a Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ c.
    • Π˜Ρ€Ρ€Π΅Ρ„Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎ — Π½ΠΈ ΠΎΠ΄Π½ΠΎ событиС Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ собой.
    • АнтисиммСтрично — Ссли событиС a Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ событиСм b, Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
  • Critical section — участок ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ производится доступ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ рСсурсу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ использован Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

    • ΠœΡŒΡŽΡ‚Π΅ΠΊΡ являСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ Π²Ρ…ΠΎΠ΄Π°/Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· критичСской сСкции.
  • БобСсСдованиС ΠΏΠΎ Java Concurrency | БтартСкст

    Взято ΠΎΡ‚ΡΡŽΠ΄Π°: http://www.rsdn.ru/forum/java/3622844.flat.aspx

    Π’ послСднСС врСмя Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… вакансиях Π½Π° Java Developer появилось Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ знания Java Concurrency/Multithreading. Π’ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΡƒΡŽ строчку сСбС Π² Ρ€Π΅Π·ΡŽΠΌΠ΅. Π― ΠΊΠ°ΠΊ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ собСсСдования, Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Ρ€Π°Π·Π²Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСдоразумСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ этого Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°.
    ВсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ связанныС с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ я Π±Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ» Π½Π° 3 класса: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, основанныС Π½Π° многопоточности ΠΈ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Π΅ΡΡ‚ΡŒ сама ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. К ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ классу(«ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅») я Π±Ρ‹ отнСс ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π΅ΡΡ‚ΡŒ класс BlaBlaBlaFactory, Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ эта Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Если Π½Π΅Ρ‚, Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ потокобСзопасной с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ReentrantLock. Ко Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ классу («ΠΎΡΠ½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π°») я Π±Ρ‹ отнСс ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄Π΅ΠΊ Π²ΠΈΠ΄Π΅ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° H.264. К Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ классу («ΡΠ²Π»ΡΡŽΡ‚ся Π΅ΠΉ») я Π±Ρ‹ отнСс ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π² ΠΊΠΎΡ€Π½Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€: написаниС runtime-срСды для языка Scala (Π½Π° Java) с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ лСгковСсных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ своСобразной модСлью памяти.
    Π’Π°ΠΊ Π²ΠΎΡ‚, Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° своС Π·Π½Π°Π½ΠΈΠ΅ java concurrency имСя Π² Π²ΠΈΠ΄Ρƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Компания ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ (написаниС высоконагруТСнного сСрвСра, написаниС физичСского/AI ядра 3D-ΡˆΡƒΡ‚Π΅Ρ€Π°, написаниС OLAP-систСмы β€” Π²ΠΎ всСх случаях с Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠžΠ”Π˜Π запрос ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΠ•Π‘ΠšΠžΠ›Π¬ΠšΠž ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²). Иногда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΏΡ€ΠΎ сущСствованиС ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ. ΠžΡΠΎΠ±Π΅Π½Π½ΡƒΡŽ Π»Π΅ΠΏΡ‚Ρƒ Π² это вносят ΠΊΠ½ΠΈΠ³ΠΈ Π²Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΎΠ±Π·ΠΎΡ€Π½ΠΎΠ³ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π°.
    НиТС я ΠΏΡ€ΠΈΠ²ΠΎΠΆΡƒ ряд вопросов с гипотСтичСского собСсСдования ΠΏΠΎ java concurrency, относящиСся ΠΊΠ°ΠΊ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ. НадСюсь ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ.
    Как ΠΈ Π½Π° всяком собСсСдовании, Π½Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ Π½Π° всС вопросы. Но прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎ-ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ с Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ 1) Ρ‡Ρ‚ΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π·Π½Π°Π΅Ρ‚; 2) ΠΎ Ρ‡Π΅ΠΌ ΡΠ»Ρ‹ΡˆΠ°Π»; 3) ΠΎ Ρ‡Π΅ΠΌ Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π»; позволяСт ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎ Π½Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅.

    1. НазовитС различия ΠΌΠ΅ΠΆΠ΄Ρƒ Collections.synchronizedMap(new HashMap()) ΠΈ ConcurrentHashMap.
    2. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коопСративная ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠ½Π° Π»ΠΈ Π»ΠΈ Π² Java. Если Π΄Π°, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ прСимущСства. Если Π½Π΅Ρ‚, Ρ‚ΠΎ какая Ρ‚ΠΎΠ³Π΄Π° Π² Java?
    3. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «Π·Π΅Π»Π΅Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΈ» ΠΈ ΠΎΠ½ΠΈ Π»ΠΈ Π»ΠΈ Π² Java (Π² HotSpot JVM.6)?
    4. Различия Π² интСрфСйсах Runnable ΠΈ Callable.
    5. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ стСк (всСго Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” push() ΠΈ pop()).
    6. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ copy-on-write ArrayList (всСго Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” void add(int indx, int item), int get(int indx), void remove(int indx), int size()).
    7. Различя ΠΌΠ΅ΠΆΠ΄Ρƒ Thread.isInterrupded() ΠΈ Thread.interrupded().
    8. Π§Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Thread.interrupt()?
    9. НСкоторыС ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² deprecated Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹. КакиС? Thread.interrupt(), Thread.stop(), Thread.yield(), Thread.suspend(), Thread.resume(), Thread.join(), Thread.start(), Thread.run(), Thread.sleep().
    10. Π§Ρ‚ΠΎ Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ асинхронных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²? Π•ΡΡ‚ΡŒ Π»ΠΈ это Π² самом языкС Java? Если Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ? Если Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΊΠ°ΠΊ Π±Ρ‹ Π’Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ?
    11. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅ Π’Π‘Π• ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΠΊΠΎΡ‡ΠΈΡ‚ΡŒ InterruptedException.
    12. Π§Ρ‚ΠΎ измСнилось ΠΌΠ΅ΠΆΠ΄Ρƒ JMM Π΄ΠΎ Java 5 ΠΈ NewJMM послС Java 5?
    13. Π’ классС String всС поля Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅. МоТно Π»ΠΈ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Ρ„ΠΈΠ½Π°Π»? Π’Π΅Π΄ΡŒ сСттСров всС Ρ€Π°Π²Π½ΠΎ Π½Π΅Ρ‚ β€” ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ поля нСльзя ΠΏΠ΅Ρ€Π΅ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ.
    14. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ordering, visibility, atomicity, happend-before, mutual exclusion. И ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… volatile, AtomicInteger, synchronize{} β€” Ρ‡Ρ‚ΠΎ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ списка присутствуСт ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… использования.
    15. НазовитС отличия synchronize{} ΠΈ ReentrantLock.
    16. Π§Ρ‚ΠΎ ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² создаСт happend-before: Thread.sleep(), Thread.join(), Thread.yield(), Thread.start(), Thread.run(), Thread.isAlive(), Thread.getState()?
    17. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅ извСстныС Π’Π°ΠΌ способы Π±ΠΎΡ€ΡŒΠ±Ρ‹ с priority inversion, Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ классы систСм Π³Π΄Π΅ ΠΎΠ½ΠΈ особСнно опасны.
    18. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅ извСстныС Π’Π°ΠΌ способы 1)ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ 2)ΠΏΠΎΠ±ΠΎΡ€ΠΎΡ‚ΡŒ возникшиС deadlock-ΠΈ (ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ядро RDBMS).
    19. РасскаТитС ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°Ρ… Reactor/Proactor?
    20. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «monitor»?
    21. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «private mutex»?
    22. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «priority inheritance»?
    23. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «backoff protocol (expotential backoff)»?
    24. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «task stealing»?
    25. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «ABA problem»?
    26. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «test-end-set»?
    27. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «test-and-test-end-set»?
    28. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «spin lock»?
    29. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «sequential consistency»?
    30. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «sense-reversing barrier»?
    31. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «safe publication»?
    32. Π§Ρ‚ΠΎ это Π·Π° свойство β€” «reentrancy»?
    33. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «recursive parallelism»?
    34. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «iterative parallelism»?
    35. Π§Ρ‚ΠΎ это Π·Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ «pipeline»?
    36. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «poison message»?
    37. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «mutual exclusion»? ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π² Java.
    38. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «condition waiting»? ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π² Java.
    39. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° SheduledThreadPool ΠΏΠ΅Ρ€Π΅Π΄ java.util.Timer.
    40. Различия ΠΌΠ΅ΠΆΠ΄Ρƒ java.util.concurrent.Atomic*.compareAndSwap() ΠΈ java.util.concurrent.Atomic*.weakCompareAndSwap().
    41. Π§Ρ‚ΠΎ Π² SynchronousQueue ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ для BlockingQueue.
    42. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «Ρ€Π°Π½Π΄Π΅Π²Ρƒ»? ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ°ΠΊΠΈΡ… классов Π² Java Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ?
    43. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «false sharing». ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ происходит Π² Java. Если Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΊΠ°ΠΊ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ. Если Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ±ΠΎΡ€ΠΎΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ JVM.
    44. Thread.getState() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр Thread. State. КакиС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ значСния?
    45. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ/ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ с использованиСм synchronize{}. Π‘ использованиСм ReentrantLock.
    46. Π£ ReentrantLock созданного с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ true всС ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π·Π°Ρ…Π²Π°Ρ‚Π° Π±Π»ΠΎΠΊΡ‚Ρ€ΠΎΠ²ΠΊΠΈ β€” Π½Π΅ fair. Какой? Как это ΠΎΠ±ΠΎΠΉΡ‚ΠΈ?
    47. ΠŸΡ€ΠΈΠ²Π΅Π΄ΠΈΡ‚Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ сущСствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ CountDownLatch ΠΈ Barrier.
    48. Π§Ρ‚ΠΎ Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ Erlang? Π§Ρ‚ΠΎ Π² Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ сущСствСнного связанного с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ, Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² Java?
    49. Π§Ρ‚ΠΎ Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ CSP? Π§Ρ‚ΠΎ Π² Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ сущСствСнного связанного с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ, Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² Java?
    50. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Thread.start() ΠΈ Thread.run()?

    МодСль ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java


    ο»Ώ МодСль ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java

    БистСма Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Java зависит ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ…, ΠΈ всС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов спроСктированы с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ многопоточности. ЀактичСски Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ всСй срСдС выполнСния. Π­Ρ‚ΠΎ позволяСт ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π½Π΅ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π·Π° счСт прСдотвращСния холостой растраты Ρ†ΠΈΠΊΠ»ΠΎΠ² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора.

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

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

    ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… состояниях. ΠŸΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ врСмя Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора. Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ приостановлСн, Ρ‡Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ приостановлСнного ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ, позволяя Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ‚ΠΎΠ³ΠΎ мСста, Π³Π΄Π΅ ΠΎΠ½ Π±Ρ‹Π» приостановлСн. ΠŸΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½, ΠΊΠΎΠ³Π΄Π° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ рСсурса. Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Π½, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ останавливаСт Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΡƒΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½.

    Runnable ΠΈ Thread. ΠšΡƒΡ€Ρ «ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Java»

    Π’ Java ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ организуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйса Runnable ΠΈ класса Thread, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ Runnable. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ – ΠΏΡ€ΠΎΡ‰Π΅.

    Π’Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, выносится Π² свой класс, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ run(). Код ΠΌΠ΅Ρ‚ΠΎΠ΄Π° run() выполняСтся, ΠΊΠΎΠ³Π΄Π° ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° Thread примСняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ start(). НСпосрСдствСнный Π²Ρ‹Π·ΠΎΠ² run() Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ создаСт.

    Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    public class ThreadTest {
        public static void main(String[] args) 
                     throws InterruptedException {
     
            AnotherRun anotherRun = new AnotherRun();
            Thread childTread = new Thread(anotherRun);
            childTread.start();
     
            for (int i = 0; i < 3; i++) {
                System.out.println("m" + i);
                Thread.sleep(1000);
            }
     
            childTread. join();
            System.out.println("End");
        }
    }
     
    class AnotherRun implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 5; i++) {
                System.out.println("r" + i);
                try {
                    Thread.sleep(1000);
                }
                catch (InterruptedException e) {
                    System.out.println("Interrupt");
                }
            }
        }
    }

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния:

    m0
    r0
    m1
    r1
    m2
    r2
    r3
    r4
    End

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

    ΠœΠ΅Ρ‚ΠΎΠ΄ join() заставляСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π½ΠΈΡ‚ΠΈ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ примСняСтся. Волько послС этого Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ своСго ΠΊΠΎΠ΄Π°.

    Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ создаСм класс-наслСдник ΠΎΡ‚ Runnable. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Runnable ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅ пСрСдаСтся Π² конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° Thread. ПослС этого ΠΏΠΎΡ‚ΠΎΠΊ запускаСтся.

    Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс являСтся наслСдником Thread:

    public class ThreadTest1 {
        public static void main(String[] args) 
                 throws InterruptedException {
     
            AnotherTask thread = new AnotherTask();
            thread.start();
     
            for (int i = 0; i < 3; i++) {
                System.out.println("m" + i);
                Thread.sleep(1000);
            }
     
            thread.join();
            System.out.println("End");
        }
    }
     
    class AnotherTask extends Thread {
        @Override
        public void run(){
            for (int i = 0; i < 5; i++) {
                System.out.println("r" + i);
                try {
                    Thread.sleep(1000);
                }
                catch (InterruptedException e) {
                    System.out.println("Interrupt");
                }
            }
        }
    }

    Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Ссли класс для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса (Π½Π΅ Thread). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Java Π½Π΅Ρ‚ мноТСствСнного наслСдования классов, приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наслСдованиС ΠΎΡ‚ интСрфСйса Runnable. Π’Π°ΠΊΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ Π΄Π°Π΅Ρ‚ возмоТности Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ СдинствСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ anotherRun Π² нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° Thread.

    Напомним, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ класс Thread сам являСтся наслСдником Runnable.

    Если Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ обособляСтся нСбольшая ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ класс:

    public class ThreadNoName {
        public static void main(String[] args) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("hi");
                }
            });
            thread.start();
     
            Thread thread1 = new Thread() {
                @Override
                public void run() {
                    System.out.println("hello");
                }
            };
            thread1.start();
        }
    }

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

    Для прСрывания выполнСния Π½ΠΈΡ‚ΠΈ, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ interrupt(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ устанавливаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ isInterrupt Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true. К ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, унаслСдованного ΠΎΡ‚ Runnable/Thread, это пСрСмСнная Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ. ΠžΡ‚ΡΡŽΠ΄Π° слСдуСт, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π² Java Π½Π΅Ρ‚ возмоТности ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ·Π²Π½Π΅, ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сам.

    Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ sleep() ΡƒΠΆΠ΅ встроСна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ isInterrupt, поэтому ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚. Если sleep() считываСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ прСрывания, Ρ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
     
    public class ThreadInterrupt {
        public static void main(String[] args) 
                       throws IOException {
            Thread thread = new InterruptedClass();
            thread.start();
            BufferedReader reader = new BufferedReader(
                     new InputStreamReader(System.in));
            reader.readLine();
            thread.interrupt();
        }
    }
     
    class InterruptedClass extends Thread {
        @Override
        public void run() {
            while (true) {
                System.out.print("a");
                try {
                    sleep(1000);
                }
                catch (InterruptedException e) {
                    break;
                }
            }
        }
    }

    Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ основной ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ…, Π² это врСмя выполняСтся вторая Π½ΠΈΡ‚ΡŒ. Но ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ Enter, выполнится ΠΌΠ΅Ρ‚ΠΎΠ΄ interrupt(). Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ sleep() ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ isInterrupt класса Thread ΠΈ сгСнСрируСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ InterruptedException.

    Если sleep() Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‚ΠΎ isInterrupt провСряСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ isInterrupted(). Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ содСрТит ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΡΡ‰ΡƒΡŽ ΠΊ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΡŽ:

    public class ThreadInterrupt2 {
        static int a = 1;
        public static void main(String[] args) 
                 throws InterruptedException {
            Thread thread = new WithoutSleep();
            thread.start();
            Thread.sleep(2000);
            thread.interrupt();
        }
    }
     
    class WithoutSleep extends Thread {
        @Override
        public void run() {
            while (true) {
                System.out.println("hi");
            }
        }
    }

    ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· 2 сСкунды сработаСт ΠΌΠ΅Ρ‚ΠΎΠ΄ interrupt(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Ρ€Π²Π΅Ρ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΡŽΡŽ Π½ΠΈΡ‚ΡŒ. Однако, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½Π΅ΠΉ Π½Π΅ провСряСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ isInterrupt, Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

    class WithoutSleep extends Thread {
        @Override
        public void run() {
            while (!this. isInterrupted()) {
                System.out.println("hi");
            }
        }
    }

    ΠŸΡ€ΠΈ наслСдовании ΠΎΡ‚ Runnable Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Ρ‡Π΅Ρ€Π΅Π· this ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ нСльзя. Π•Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚, вызывая ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса Thread:

    class WithoutSleep2 implements Runnable {
        @Override
        public void run() {
            Thread cur = Thread.currentThread();
            while (!cur.isInterrupted()) {
                System.out.println("hi");
            }
        }
    }

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

    Π­Ρ‚ΠΎ – ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ β€œThreading in Java” Π°Π²Ρ‚ΠΎΡ€Π° Beka Kodirov. Вторая Ρ‡Π°ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΠΈ находится здСсь.

    Π§Π΅ΠΌ отличаСтся ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ процСсса?

    ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ для обСспСчСния многозадачности Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах. ВсС прилоТСния ΠΆΠΈΠ²ΡƒΡ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… процСссов, Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ЦПУ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ядром ОБ. ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ вашСго прилоТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

    • PID – ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса
    • PPID – ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ процСсса
    • UID – ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
    • Heap – пространство памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ процСсса. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ собствСнным пространством.

    По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс содСрТит ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ main- ΠΈΠ»ΠΈ ui-). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ, процСсс уничтоТаСтся. ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ мноТСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ процСссу.

    ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ участками памяти, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠžΠ±Π»Π°ΡΡ‚ΠΈ памяти процСссов Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ участок RAM.

    ВсС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Java ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Linux-ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Ρ‚. Π½.pthreads. ΠŸΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ процСссу, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π±Ρ‹Π» создан.

    Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚Π½ΡƒΡŽ ΠΈ Π²Ρ‹Ρ‚Π΅ΡΠ½ΡΡŽΡ‰ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ

    БущСствуСт нСсколько Ρ‚ΠΈΠΏΠΎΠ² многозадачности – Π½Π΅Π²Ρ‹Ρ‚Π΅ΡΠ½ΡΡŽΡˆΠ°Ρ, совмСстная, Π²Ρ‹Ρ‚Π΅ΡΠ½ΡΡŽΡ‰Π°Ρ.

    БовмСстная ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ

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

    Π’Ρ‹Ρ‚Π΅ΡΠ½ΡΡŽΡ‰Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ

    Π‘ΠΎΠ»Π΅Π΅ соврСмСнный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ распрСдСлСниСм рСсурсов ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами занимаСтся опСрационная систСма. ΠŸΡ€ΠΈ этом достигаСтся мСньшСС врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ основС этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π»Π΅ΠΆΠΈΡ‚ приоритСзация: процСсс с Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ приостановлСн Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ.

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ β€œGreen Threads” ΠΈ Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΎΠ½ΠΈ Π² Java (HotSpot JVM 7)?

    Π’ Java Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ β€œΠ·Π΅Π»Ρ‘Π½Ρ‹ΠΉ поток”. Он ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ native ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π° вСсь ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π·Π΅Π»Ρ‘Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ JVM, Π° Π½Π΅ ядро ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

    Но Π΅ΡΡ‚ΡŒ ΠΈ нСдостатки. Π‘Π°ΠΌΡ‹ΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ – Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выполнСния ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’Π°ΠΊ ΠΊΠ°ΠΊ native ΠΏΠΎΡ‚ΠΎΠΊ всСго ΠΎΠ΄ΠΈΠ½, Π΄Π°ΠΆΠ΅ Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько процСссоров ΠΈ мноТСство Π·Π΅Π»Ρ‘Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ смоТСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ЦПУ.

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²? Какой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚?

    Π’ систСмС, Π³Π΄Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ нСсколько ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ ΠΏΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ всю ΠΌΠΎΡ‰ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния, рСсурсы процСссора Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ это находится Π² Π·ΠΎΠ½Π΅ отвСтствСнности ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°. Он Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ. Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ планирования ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ всС ΠΎΠ½ΠΈ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π΅: ΠΏΠΎΡ‚ΠΎΠΊ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ рСсурсы Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π΄ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ β€œΠ½ΠΈΠ·ΠΊΠΎΠΌΡƒβ€ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. Π’ Java ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 1 (самый Π½ΠΈΠ·ΠΊΠΈΠΉ) Π΄ΠΎ 10 (самый высокий). ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π΅Π½ 5.

    ΠšΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства многопоточности Π² однопроцСссорных систСмах?

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

    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ особСнно Π²Π°ΠΆΠ½Π° Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с мноТСством ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… рСсурсов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ IO ΠΈΠ»ΠΈ взаимодСйствиСм с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом,

    Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ Π² Java — Π Π°Π·Π½ΠΈΡ†Π° ΠœΠ΅ΠΆΠ΄Ρƒ

    Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΈ нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² Java являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ выполняСт Π·Π°Π΄Π°Ρ‡ΠΈ процСсса, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² многопоточности нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ процСсса.

    Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΈ нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² Java являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ выполняСт Π·Π°Π΄Π°Ρ‡ΠΈ процСсса, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² многопоточности нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ процСсса.

    ΠŸΡ€ΠΎΡ†Π΅ΡΡ — это исполняСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ процСсса являСтся рСсурсоСмкой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ процСсс Π½Π° нСсколько Π±Π»ΠΎΠΊΠΎΠ², Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. ΠΠΈΡ‚ΡŒ — это Π»Π΅Π³ΠΊΠΈΠΉ процСсс. МоТно Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ процСсс Π½Π° нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΈΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ. Когда Π² процСссС Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΎΠ½ называСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Когда Π² процСссС Π΅ΡΡ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², это называСтся ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

    ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ области ΠΏΠΎΠΊΡ€Ρ‹Ρ‚Ρ‹

    1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Single Thread Π² Java
    Β  β€“Β ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
    2. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Java
    Β  β€“Β ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
    3. Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ Π² Java
    Β  – БравнСниС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ

    ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ условия

    Java, ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ, процСсс


    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Single Thread Π² Java

    Π’ ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ процСсс содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ выполняСт всС Π·Π°Π΄Π°Ρ‡ΠΈ, связанныС с процСссом. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ.

    Рисунок 1: ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Java

    Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ a ΠΈ b ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ° integer. Π•ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° HelloWord. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, программист ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Add, Sub, Mul ΠΈ Div. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ слоТСниС, Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠ΅. НаконСц, эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° консоли. БущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈ ΠΎΠ½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² Java

    Π’ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ рСсурсы. Π’ Java Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для создания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π­Ρ‚ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса Runnable ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ класса Thread. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

    Рисунок 2: ΠœΡƒΠ»ΡŒΡ‚ΠΈ потоковая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Java

    Рисунок 3: Класс с основным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ

    HelloWorld — это класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Runnable. Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° run Π΅ΡΡ‚ΡŒ рСализация. Runnable интСрфСйс ΠΈΠΌΠ΅Π΅Ρ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚ΠΎ отправная Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ° находится Π²Π½ΡƒΡ‚Ρ€ΠΈ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ThreadName — это имя Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. ПослС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° программист ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° start (). ВыполняСт ΠΌΠ΅Ρ‚ΠΎΠ΄ run. Π’ консоли Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

    Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ Π² Java

    ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

    ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ — это Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСго процСсса ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π±Π΅Π· прСрывания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΡΡ‚ΡŒ — это Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ нСзависимо ΠΏΡ€ΠΈ совмСстном использовании своих рСсурсов. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, это основноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ Π² Java.

    основа

    Один ΠΏΠΎΡ‚ΠΎΠΊ выполняСт процСсс Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. НСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ процСсс Π² многопоточности. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ Π² Java.

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

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

    Бсылка:

    1. Β«Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ? — ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Techopedia. ”Techopedia.com,

    Вакансия Senior Android Developer (Digital Health) ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ondoc Π½Π° vc.ru, Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³

    Вакансия Senior Android Developer (Digital Health) ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ondoc Π½Π° vc.ru, Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³ [ { «id»: 1, «label»: «100%Γ—150_Branding_desktop», «provider»: «adfox», «adaptive»: [ «desktop» ], «adfox_method»: «createAdaptive», «auto_reload»: true, «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «bugf», «p2»: «ezfl» } } }, { «id»: 2, «label»: «1200Ρ…400», «provider»: «adfox», «adaptive»: [ «phone» ], «auto_reload»: true, «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «bugf», «p2»: «ezfn» } } }, { «id»: 3, «label»: «240Ρ…200 _Π’Π“Π‘_desktop», «provider»: «adfox», «adaptive»: [ «desktop» ], «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «bugf», «p2»: «fizc» } } }, { «id»: 4, «label»: «Article Branding», «provider»: «adfox», «adaptive»: [ «desktop» ], «adfox»: { «ownerId»: 228129, «params»: { «p1»: «cfovx», «p2»: «glug» } } }, { «id»: 5, «label»: «300x500_desktop», «provider»: «adfox», «adaptive»: [ «desktop» ], «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «bugf», «p2»: «ezfk» } } }, { «id»: 6, «label»: «1180Ρ…250_Interpool_Π±Π°Π½Π½Π΅Ρ€ Π½Π°Π΄ коммСнтариями_Desktop», «provider»: «adfox», «adaptive»: [ «desktop» ], «adfox»: { «ownerId»: 228129, «params»: { «pp»: «h», «ps»: «bugf», «p2»: «ffyh» } } }, { «id»: 7, «label»: «Article Footer 100%_desktop_mobile», «provider»: «adfox», «adaptive»: [ «tablet», «phone» ], «adfox»: { «ownerId»: 228129, «params»: { «p1»: «bwkpg», «p2»: «fjxb» } } }, { «id»: 8, «label»: «Fullscreen Desktop», «provider»: «adfox», «adaptive»: [ «desktop», «tablet» ], «auto_reload»: true, «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «bugf», «p2»: «fjoh» } } }, { «id»: 9, «label»: «Fullscreen Mobile», «provider»: «adfox», «adaptive»: [ «phone» ], «auto_reload»: true, «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «bugf», «p2»: «fjog» } } }, { «id»: 10, «disable»: true, «label»: «Native Partner Desktop», «provider»: «adfox», «adaptive»: [ «desktop», «tablet» ], «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «clmf», «p2»: «fmyb» } } }, { «id»: 11, «disable»: true, «label»: «Native Partner Mobile», «provider»: «adfox», «adaptive»: [ «phone» ], «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «clmf», «p2»: «fmyc» } } }, { «id»: 12, «label»: «ΠšΠ½ΠΎΠΏΠΊΠ° Π² шапкС», «provider»: «adfox», «adaptive»: [ «desktop» ], «adfox»: { «ownerId»: 228129, «params»: { «p1»: «bscsh», «p2»: «fdhx» } } }, { «id»: 13, «label»: «DM InPage Video PartnerCode», «provider»: «adfox», «adaptive»: [ «desktop», «tablet», «phone» ], «adfox_method»: «createAdaptive», «adfox»: { «ownerId»: 228129, «params»: { «pp»: «h», «ps»: «bugf», «p2»: «flvn» } } }, { «id»: 14, «label»: «Yandex context video banner», «provider»: «yandex», «yandex»: { «block_id»: «VI-223676-0», «render_to»: «inpage_VI-223676-0-1104503429», «adfox_url»: «//ads. adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=» } }, { «id»: 15, «label»: «Π‘Π°Π½Π½Π΅Ρ€ Π² Π»Π΅Π½Ρ‚Π΅ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ», «provider»: «adfox», «adaptive»: [ «desktop», «tablet», «phone» ], «adfox»: { «ownerId»: 228129, «params»: { «p1»: «byudx», «p2»: «ftjf» } } }, { «id»: 16, «label»: «ΠšΠ½ΠΎΠΏΠΊΠ° Π² шапкС ΠΌΠΎΠ±Π°ΠΉΠ»», «provider»: «adfox», «adaptive»: [ «tablet», «phone» ], «adfox»: { «ownerId»: 228129, «params»: { «p1»: «byzqf», «p2»: «ftwx» } } }, { «id»: 17, «label»: «Stratum Desktop», «provider»: «adfox», «adaptive»: [ «desktop» ], «auto_reload»: true, «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «bugf», «p2»: «fzvb» } } }, { «id»: 18, «label»: «Stratum Mobile», «provider»: «adfox», «adaptive»: [ «tablet», «phone» ], «auto_reload»: true, «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «bugf», «p2»: «fzvc» } } }, { «id»: 19, «label»: «Π’ΠΈΠ·Π΅Ρ€ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ 2», «provider»: «adfox», «adaptive»: [ «desktop», «tablet», «phone» ], «auto_reload»: true, «adfox»: { «ownerId»: 228129, «params»: { «p1»: «cbltd», «p2»: «gazs» } } }, { «id»: 20, «label»: «ΠšΠ½ΠΎΠΏΠΊΠ° Π² сайдбарС», «provider»: «adfox», «adaptive»: [ «desktop» ], «adfox»: { «ownerId»: 228129, «params»: { «p1»: «cgxmr», «p2»: «gnwc» } } }, { «id»: 21, «label»: «Π£Π»ΡŒΡ‚Ρ€Π°Ρ‚ΠΈΠ·Π΅Ρ€», «provider»: «adfox», «adaptive»: [ «desktop» ], «adfox»: { «ownerId»: 228129, «params»: { «pp»: «g», «ps»: «bugf», «p2»: «gtjk» } } } ] {«token»:»eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJwcm9qZWN0SWQiOiI1ZTRmZjUxODYyOGE2YzcxNDUxNWY0ZGEiLCJpYXQiOjE1ODI1MzY0NDB9.AwBBnUWMy3RR1xtAoaXVr81WvqxdlD4C8CBpwFiONzw»,»release»:»fe552c7f»} null ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ

    Π² Java, Ρ‡Π°ΡΡ‚ΡŒ I — Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Java Spring

    Π’ ΠΌΠΎΠ΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ постС я описал основы многопоточности, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ это здСсь: http://www.zoltanraffai.com/blog/multithreading-and-concurrency -at-a-glance /

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Java, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java.

    Java Threading Foundation

    Π’ Java сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ абстракции ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΠ΄Π΅Π΅ΠΉ многопоточности, Π½ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹: основныС Ρ‚ΠΈΠΏΡ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… systems:

    • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ запускаСтся для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.
    • Нам Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ Π² явном Π²ΠΈΠ΄Π΅: ΠœΡ‹ нСсСм ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° любой Ρ‚ΠΈΠΏ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ.
    • Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ привязаны ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ: ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ собствСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

    Π’ΠΈΠΏΡ‹ оснований для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

    Π£ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° основных Ρ‚ΠΈΠΏΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹:

    ЗапускаСмый интСрфСйс:

    • ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ для выполнСния Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅
    • Π˜ΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‡Π»Π΅Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся запуском ΠœΠ΅Ρ‚ΠΎΠ΄

    Класс ΠΏΠΎΡ‚ΠΎΠΊΠ°:

    • ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния
    • ΠœΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° состояниС ΠΏΠΎΡ‚ΠΎΠΊΠ°
    • Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ start

    Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт нСсколько Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅:

    Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ создали FileAdder класс , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Runnable .Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Runnable — это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс , поэтому Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄: run ().

    Π’ нашСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ main ΠΌΡ‹ создали Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Thread для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ FileAdder . Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ здСсь Π±Π»ΠΎΠΊ try-catch. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ происходит Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ class run () FileAdder.

    Если Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°:

    Основной ΠΏΠΎΡ‚ΠΎΠΊ запускаСт Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ для всСх восьми Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ послС Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρƒ Π½Π΅Π³ΠΎ большС Π½Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹, поэтому ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½.
    ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ основного ΠΏΠΎΡ‚ΠΎΠΊΠ° вСсь процСсс Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡ΠΈΡ‰Π΅Π½, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡΡ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρƒ нас ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ошибки Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ это, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Main Thread ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Threads .
    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Ρ‚Π°ΠΊ:

    Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ создали массив ΠΈΠ· элСмСнтов Thread ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ всС созданныС Threads Π² этот массив. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ это сдСлаСм, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС элСмСнтов массива ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ для Π½ΠΈΡ… Join () . Π­Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ наш Основной ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° вСсь ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, поэтому ΠΎΠ½ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ наш ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° вся Ρ€Π°Π±ΠΎΡ‚Π°.
    Если ΠΏΠΎΡ‚ΠΎΠΊ ΡƒΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ для Π½Π΅Π³ΠΎ join, ΠΎΠ½ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ возвращаСтся.

    Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ простой ΠΊΠΎΠ΄ для управлСния ΠΏΡƒΠ»Π°ΠΌΠΈ, ΠΈ ΠΎΠ½ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π§Ρ‚ΠΎ, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ 1000 Ρ„Π°ΠΉΠ»ΠΎΠ² для управлСния вмСсто 8? Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, эти Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ большими, ΠΈ Π½Π° ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ? Если ΠΌΡ‹ запустим 1000 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ Π·Π°Π΄ΡƒΡˆΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ систСму.

    ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ информация ΠΎΠ± ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ

    Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ класса ΠΏΠΎΡ‚ΠΎΠΊΠ°:

    • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запуском, Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

    Challange of the Thread class:

    • ΠžΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° эффСктивноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ запуском, остановкой ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
    • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ

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

    ΠŸΡƒΠ»Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

    • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ для Π·Π°Π΄Π°Ρ‡
    • НазначаСт Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡƒΠ»Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
    • ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄Π΅Ρ‚Π°Π»ΠΈ управлСния ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ

    Π’ Java Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΏΡƒΠ»ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°ΡŽΡ‚ Π½Π°ΠΌ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏ абстракции:

    ExecutorServiceInterface

    • МодСли повСдСния ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
    • ΠœΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ
    • Запрос ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡƒΠ»Π°

    Класс исполнитСлСй (ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ создания ΠΏΡƒΠ»ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²)

    • ΠŸΡƒΠ»Ρ‹ с динамичСским Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ
    • ΠŸΡƒΠ»Ρ‹ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ
    • ΠŸΡƒΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄

    Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° наш ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ это Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

    Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ создали ExecutorService с фиксированным Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 3. ΠœΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Π΅ΠΌΡƒ всС наши Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ… Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ, Π½ΠΎ ΠΎΠ½ управляСт Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 3 ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ:
    ПослС Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ запуска ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ запуска Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, ΠΏΠΎΠΊΠ° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π·Π°Π±Π΅Π³ΠΎΠ² Π½Π΅ закончится.
    Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ Ρƒ нас 8 ΠΈΠ»ΠΈ 8000 Ρ„Π°ΠΉΠ»ΠΎΠ² для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ нашСй систСмы останСтся ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ.

    ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ shutdown () , Π½ΠΎΠ²Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ Π½Π°Ρ‡Π½ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Π½ΠΎ ΠΎΠ½ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ….
    ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ. По истСчСнии этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ.

    Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ многопоточности здСсь.

    Tagged #Spring #Java

    Java Multithreading | Код Π’Ρ‹ΠΊΠ²Π°

    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ — это ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠ»ΠΈ процСссу Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ мноТСство Π·Π°Π΄Π°Ρ‡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ (ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ). Π­Ρ‚ΠΎ позволяСт процСссу Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ свои Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π΄Π°ΠΆΠ΅ Π² однопроцСссорной систСмС.

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

    Java ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°. Π’ Java Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java (JVM) позволяСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² выполнСния, выполняСмых ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π­Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ отвСтствСнной ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ЦП ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π­Ρ‚Π° встроСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… сторон java ΠΈ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π΅ΠΉ Π·Π°Π²ΠΎΠ΅Π²Π°Ρ‚ΡŒ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ.

    Если Π²Ρ‹ ΠΏΠΎΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ собСсСдованиС с ядром Java, Π²Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с вопросами ΠΈΠ·-Π·Π° многопоточности. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒΠ½Ρ‹Ρ… долТностСй Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ Π² области многопоточности ΠΈ ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ настройки Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Π½ΠΈΠ·ΠΊΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΡΡ‚Π°Ρ‚ΡŒΠΈ, посвящСнныС Π²Π°ΠΆΠ½Ρ‹ΠΌ Ρ‚Π΅ΠΌΠ°ΠΌ, ΠΈ вопросы ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ, связанныС с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π² JAVA.

    1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ запуск ΠΏΠΎΡ‚ΠΎΠΊΠ° | ΠŸΠΎΡ‚ΠΎΠΊ VS Runnable
    2. ОбмСн Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² wait (), notify () ΠΈ notifyAll ()
    3. interrupt (), interrupted () ΠΈ isInterrupted ()
    4. InterruptedException
    5. Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π½ΠΈΡ‚Π΅ΠΉ Π² одноэлСмСнтном шаблонС проСктирования с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ

    Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Java


    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ слоТно ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ с солидным ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ эффСктивно Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°. Π’Π°ΠΊΠΆΠ΅ нСдостаточно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ ΠΎ многопоточности. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ…, доступных Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ java.util.concurrent . Π’ΠΎΡ‚ список статСй ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Ρ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ…. Π₯ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ΡΡŒ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ собСсСдованию ΠΏΠΎ Java. πŸ™‚

    1. CountDownLatch
    2. CyclicBarrier
    3. CountDownLatch ΠΏΡ€ΠΎΡ‚ΠΈΠ² CyclicBarrier
    4. Π¨Π°Π±Π»ΠΎΠ½ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π° производитСля с использованиСм BlockingQueue
    5. Threadpool с использованиСм Executor Framework
    6. Hashtable ΠΏΡ€ΠΎΡ‚ΠΈΠ² SynchronizedMap ΠΏΡ€ΠΎΡ‚ΠΈΠ² ConcurrentHashMap

    ΠœΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π² этот Ρ€Π°Π·Π΄Π΅Π».Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° обновлСниями πŸ™‚ Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ писали ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅ ΠΈΠ»ΠΈ вопросу ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с Π½Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· facebook ΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ письмо Π½Π° [адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½]


    25 самых часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… вопросов Π½Π° собСсСдовании ΠΏΠΎ многопоточности Java

    Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ сталкиваСмся с двумя Ρ‚Π΅ΠΌΠ°ΠΌΠΈ: вопросы собСсСдования ΠΏΠΎ сбору java ΠΈ вопросы многопоточности. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ — это ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒΡΡ — это Ρ…ΠΎΡ€ΠΎΡˆΠΎ, поэтому Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ оставляйтС эту Ρ‚Π΅ΠΌΡƒ.ΠœΡ‹ дСлимся Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ вопросами ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ java.

    1 ΠΊΠ². Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½ΠΈΡ‚ΡŒ?

    ΠŸΠΎΡ‚ΠΎΠΊ — это Π»Π΅Π³ΠΊΠΈΠΉ подпроцСсс. Класс Thread ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ java.lang. Π£ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΅ΡΡ‚ΡŒ собствСнный стСк. Π­Ρ‚ΠΎ способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСства Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссоров, доступных Π½Π° машинС. НапримСр, Ссли ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ трСбуСтся 50 миллисСкунд для выполнСния задания, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 10 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ Π΄ΠΎ 5 миллисСкунд.

    Q2 Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΈ процСссом?

    Π£ процСсса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ процСсса, ΠΈ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ Ρ‡Π°ΡΡ‚ΡŒ процСсса ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

    ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ свой собствСнный адрСс, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ раздСляСт адрСсноС пространство процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ создал.

    ΠŸΠΎΡ‚ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный стСк, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² процСссС всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠΉ систСмный рСсурс, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΡƒΡ‡ΠΈ.

    Q3 Как ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π² Java?


    Π•ΡΡ‚ΡŒ Π΄Π²Π° способа Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Thread Π² java.
    1. РСализуя интСрфСйс Runnable Π² java, Π° Π·Π°Ρ‚Π΅ΠΌ создавая ΠΈΠ· Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Thread.
    2. Π Π°ΡΡˆΠΈΡ€ΡΡ класс Thread.

    Q4 Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Runnable ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ Thread ΠΏΡ€ΠΈ создании ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² java? Какая ΠΈΠ· Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅?

    РСализация Runnable Π»ΡƒΡ‡ΡˆΠ΅.

    Когда ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ интСрфСйс Runnable, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс, Π½ΠΎ Ссли ΠΌΡ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠΌ класс Thread, ΠΌΡ‹ Π½Π΅ смоТСм Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ java Π½Π΅ допускаСт мноТСствСнного наслСдования.

    Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Runnable ΠΈ extends Thread.

    Q5 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠΎΡ‚ΠΎΠΊΠ°?

    Когда ΠΌΡ‹ создаСм экзСмпляр ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π΅Π³ΠΎ состояниС Π½ΠΎΠ²ΠΎΠ΅. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ запускаСм ΠΏΠΎΡ‚ΠΎΠΊ, Π·Π°Ρ‚Π΅ΠΌ Π΅Π³ΠΎ состояниС мСняСтся Π½Π° Runnable (Π³ΠΎΡ‚ΠΎΠ² ΠΊ запуску, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½). Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² зависит ΠΎΡ‚ ThreadScheduler. ThreadScheduler ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ процСссоров ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Π² ΠΏΡƒΠ»Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Runnable ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΡ… состояния Π½Π° Running. ОТиданиС, Blocked ΠΈ Dead — ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ состояния ΠΏΠΎΡ‚ΠΎΠΊΠ°.

    Π˜Ρ‚Π°ΠΊ ΠΊΠΎΡ€ΠΎΡ‡Π΅ Π½ΠΎΠ²Ρ‹Π΅, работоспособныС, Ρ…ΠΎΠ΄ΠΎΠ²Ρ‹Π΅.ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΉ — это состояния, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΡ‚ΠΎΠΊ.

    Q6 Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ сна ΠΈ оТидания Π² java?

    ΠœΠ΅Ρ‚ΠΎΠ΄ оТидания снимаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ оТидания Π½Π΅ снимаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ.
    ΠœΠ΅Ρ‚ΠΎΠ΄ оТидания ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ классу java.lang.Object, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ сна ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ классу java.lang.Thread.

    Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎ различиях ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ оТидания ΠΈ сна Π² java.

    Q7 Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ запуском ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° start () ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° run ()?

    Π­Ρ‚ΠΎΡ‚ вопрос Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТный ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ вас Ρ‚ΠΎΠΆΠ΅ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ.ΠžΡ‚Π²Π΅Ρ‚: ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ start (), основной ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ run () для запуска вновь созданного ΠΏΠΎΡ‚ΠΎΠΊΠ°, поэтому ΠΌΠ΅Ρ‚ΠΎΠ΄ run Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ вызываСтся вновь созданным ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.
    Когда Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ run (), ΠΎΠ½ вызываСтся Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ запускаСтся, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° start ().

    Q8 Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΄Π΅ΠΌΠΎΠ½Π°?

    Когда ΠΌΡ‹ создаСм ΠΏΠΎΡ‚ΠΎΠΊ Π² java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΎΠ½ называСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΄Π΅ΠΌΠΎΠ½Π°, Ссли ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°ΠΏΡƒΡ‰Π΅Π½.

    ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π΄Π΅ΠΌΠΎΠ½Π° — это ΠΏΠΎΡ‚ΠΎΠΊΠΈ с Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ„ΠΎΠ½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ. Он прСдоставляСт услуги ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ. Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, созданный ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π΅ΠΌΠΎΠ½Π°, Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΄Π΅ΠΌΠΎΠ½Π°.

    Q9 Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½Π° Π² java?

    Установив setDaemon (true), ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½Π° Π² java.

    Q10 КакоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ использованиС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова volatile?

    Когда ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΠΉ, Ρ‚ΠΎΠ³Π΄Π° всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСпосрСдствСнно ΠΈΠ· памяти ΠΈ Π½Π΅ ΠΊΡΡˆΠΈΡ€ΡƒΡŽΡ‚.Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ постоянно ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ.

    volatile — это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ.

    Q11 МоТно Π»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π²Π°ΠΆΠ΄Ρ‹?

    НСт, Π½Π΅Ρ‚ возмоТности Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π²Π°ΠΆΠ΄Ρ‹. Если ΠΌΡ‹ это сдСлаСм, это Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

    Q12 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ синхронизация?

    Бинхронизация — это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ доступом Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ рСсурсу.
    Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство синхронизации —
    a. Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ
    b. Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ пСрСсСчСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

    Q13 Π§Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ — Π±Π»ΠΎΠΊ синхронизации ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ синхронизации?

    Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ являСтся Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ способом, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ синхронизированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ остановит Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… синхронизированных Π±Π»ΠΎΠΊΠΎΠ² Π² классС, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π½Π΅ связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой, ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Ρ‚ ΠΈΡ… Π² состояниС оТидания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

    Q14 Различия ΠΈ сходства ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ сна ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π°?

    ΠœΠ΅Ρ‚ΠΎΠ΄ сна Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ спящий ΠΏΠΎΡ‚ΠΎΠΊ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ yield Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

    ΠœΠ΅Ρ‚ΠΎΠ΄ Thread.sleep () Π½Π΅ заставляСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠ², Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ yield отказываСтся ΠΎΡ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°.
    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ объяснСниС Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ сна ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π² java.

    Q15 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΡƒΠΏΠΈΠΊ?

    Π’ΡƒΠΏΠΈΠΊ — это ситуация, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΆΠ΄ΡƒΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΡΡ‚ΡŒ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ рСсурсов.НапримСр,

    ΠŸΠΎΡ‚ΠΎΠΊ 1: Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ рСсурс A, ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ рСсурса B
    ΠŸΠΎΡ‚ΠΎΠΊ 2: Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ рСсурс B, ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ рСсурса A

    Q16 ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для создания Ρ‚ΡƒΠΏΠΈΠΊΠΎΠ²ΠΎΠΉ ситуации Π² java?

    Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для создания Ρ‚ΡƒΠΏΠΈΠΊΠ° Π² java.

    Q17 КакиС ΠΌΠ΅Ρ€Ρ‹ слСдуСт ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΡƒΠΏΠΈΠΊΠ°?

    1. Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса, Π° Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠΉΡ‚Π΅ вСсь класс.
    2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ join (), Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ соСдинСния, хотя ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ нас ΠΎΡ‚ использования всСх прСимущСств ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСды, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для прСдотвращСния Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.
    3. По возмоТности ΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² синхронизации.

    Q18 Π§Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ ΠΏΠΎΠ΄ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°?

    Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. Π•Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — int , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚ 1 Π΄ΠΎ 10, Π³Π΄Π΅ 1 — самый Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Π° 10 — самый высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚.
    ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ, Π½ΠΎ это зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ThreadScheduler, которая зависит ΠΎΡ‚ ОБ.
    ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π½ΠΎ это Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° с Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ.

    Q19 Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ класса ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°?

    ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ввСдя синхронизированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса класса, ввСдя статичСскиС синхронизированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

    ΠœΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. Π’ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ класса ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса, Π½ΠΎ всСгда доступна Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса.

    Q20 Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Callable ΠΈ Runnable?

    Callable Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Runnable Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

    Π’ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Runnable нСдСйствитСлСн, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Callable ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Future.
    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ объяснСниС Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈ исполняСмым.

    Q21 Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ²Π°Π½Ρ‚ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ?

    ΠŸΡ€ΠΈ ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡Π° с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ выполняСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² состояниС оТидания ΠΈΠ»ΠΈ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ состояниС ΠΈΠ»ΠΈ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Π° с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ. ΠŸΡ€ΠΈ ΠΊΠ²Π°Π½Ρ‚ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π°Ρ‡Π° выполняСтся Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΏΡƒΠ» Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

    Q22 МоТно Π»ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ конструктор?

    НСт, ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ синхронизирован.

    Q23 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ состояниС Π³ΠΎΠ½ΠΊΠΈ Π² Java ΠΈ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ?

    Когда Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ рСсурсу Π±Π΅Π· синхронизации, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ состояниС Π³ΠΎΠ½ΠΊΠΈ.
    ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ состояниС Π³ΠΎΠ½ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синхронизированный Π±Π»ΠΎΠΊ ΠΈΠ»ΠΈ синхронизированный ΠΌΠ΅Ρ‚ΠΎΠ΄.

    Q24 Как ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ?

    ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² wait (), notify (), notifyAll ().

    Q25 ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ wait (), notify () ΠΈ notifyAll () Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· синхронизированного контСкста?

    Когда ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ wait () для любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ оставит, ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС оТидания, ΠΏΠΎΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ notify () для этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Аналогично, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ notify () для любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠ½ оставляСт ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для всСх этих ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Thread ΠΈΠΌΠ΅Π» ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², этого ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡƒΡ‚Π΅ΠΌ синхронизации.Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ wait (), notify () ΠΈ notifyAll () Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· синхронизированного контСкста.

    Q26 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ пСрСмСнная ThreadLocal Π² java?

    ThreadLocal ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ThreadLocal. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, поэтому, Ссли пСрСмСнная Π½Π΅ являСтся потокобСзопасной, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ синхронизации, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ThreadLocal.
    ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ThreadLocal, ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ get () ΠΈ set () для получСния значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ измСнСния Π΅Π³ΠΎ значСния, локального для Thread.

    Q27 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Threadpool?

    Threadpool управляСт ΠΏΡƒΠ»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π•ΡΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΆΠ΄ΡƒΡ‚ выполнСния.

    Q28 ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ lock () Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚?

    ΠœΠ΅Ρ‚ΠΎΠ΄ holdLock (Object) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
    ΠœΠ΅Ρ‚ΠΎΠ΄ holdLock (Object) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли ΠΏΠΎΡ‚ΠΎΠΊ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈΠ»ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

    Если Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ вопросом ΠΎ многопоточности java, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ вопросах, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π² коммСнтариях.

    ΠžΡΠ½ΠΎΠ²Ρ‹ многопоточности — Вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΏΠΎ Java

    Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» Π½Π°ΡˆΠΈΡ… 1000+ MCQ посвящСн основам многопоточности языка программирования Java.

    1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅?
    a) Π­Ρ‚ΠΎ процСсс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… процСсса
    b) Π­Ρ‚ΠΎ процСсс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ частСй ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ процСсса Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ
    c) Π­Ρ‚ΠΎ процСсс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ мноТСство Ρ€Π°Π·Π½Ρ‹Ρ… процСссов ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ
    d) Π­Ρ‚ΠΎ процСсс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ΄ΠΈΠ½ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… источников.
    View Answer

    Answer: b
    Explanation: ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ процСсса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ частСй ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

    2. КакиС ΠΈΠ· этих Ρ‚ΠΈΠΏΠΎΠ² многозадачности?
    a) На основС процСсса
    b) На основС ΠΏΠΎΡ‚ΠΎΠΊΠ°
    c) На основС процСсса ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°
    d) Ни ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· упомянутых
    ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚

    ΠžΡ‚Π²Π΅Ρ‚: c
    ОбъяснСниС: БущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° многозадачности: ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π½Π° основС процСсса ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π½Π° основС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

    3. ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Java Π΅ΡΡ‚ΡŒ?
    a) Π¦Π΅Π»ΠΎΠ΅ число
    b) Float
    c) double
    d) long
    ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚

    ΠžΡ‚Π²Π΅Ρ‚: a
    ОбъяснСниС: Java Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт, Ρ‡Ρ‚ΠΎ этот ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ.ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° — это Ρ†Π΅Π»Ρ‹Π΅ числа, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

    4. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ?
    a) Π›ΡŽΠ±ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ лСксографичСски
    b) Оба ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ
    c) Ни ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½
    d) Π­Ρ‚ΠΎ зависит ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы
    ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚

    ΠžΡ‚Π²Π΅Ρ‚: d
    ОбъяснСниС: In Π’ случаях, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ Π·Π° Ρ†ΠΈΠΊΠ»Ρ‹ ЦП, Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. НСкоторыС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΈΡ… Π² Ρ€Π°Π·Ρ€Π΅Π·Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² зависимости ΠΎΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

    5. КакоС ΠΈΠ· этих ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π΅Π²Π΅Ρ€Π½ΠΎ?
    a) Благодаря многопоточности врСмя простоя ЦП сводится ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ максимально ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ
    Π±) Благодаря многозадачности врСмя простоя ЦП сводится ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ максимально
    Π²) Π”Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Java ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚
    d) ΠŸΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π΄Π²ΡƒΡ… состояниях: Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½.
    ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚

    ΠžΡ‚Π²Π΅Ρ‚: d
    ОбъяснСниС: ΠΏΠΎΡ‚ΠΎΠΊ сущСствуСт Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… состояниях, ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½, приостановлСн, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½, Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ ΠΈ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅.

    6. Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° Java?

    1.  class multithreaded_programing 
    2.  {
    3.  public static void main (String args []) 
    4.  {
    5.  Thread t = Thread.currentThread (); 
    6.  System. out.println (t); 
    7. } 
    8. } 

    a) Π’Π΅ΠΌΠ° [5, main]
    b) Π’Π΅ΠΌΠ° [main, 5]
    c) Π’Π΅ΠΌΠ° [main, 0]
    d) Π’Π΅ΠΌΠ° [main, 5, main]
    ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚

    ΠžΡ‚Π²Π΅Ρ‚: d
    ПояснСниС: НСт.
    Π’Ρ‹Ρ…ΠΎΠ΄:
     $ javac multithreaded_programing.java
    $ java multithreaded_programing
    ВСма [основная, 5, основная] 

    7. Каков ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Java?

    1.  class multithreaded_programing 
    2.  {
    3.  public static void main (String args []) 
    4.  {
    5.  Thread t = Thread.currentThread (); 
    6.  БистСма.out.println (t); 
    7. } 
    8. } 

    Π°) 4
    Π±) 5
    Π²) 0
    Π³) 1
    ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚

    ΠžΡ‚Π²Π΅Ρ‚: Π±
    ОбъяснСниС: Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся Thread [main, 5, main], Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, Ρ€Π°Π²Π΅Π½ 5. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ Π½Π°Π·Π²Π°Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΎΠ½ Π½Π°Π·Π²Π°Π½ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ основной ΠΌΠ΅Ρ‚ΠΎΠ΄.
    Π’Ρ‹Ρ…ΠΎΠ΄:
     $ javac multithreaded_programing.java
    $ java multithreaded_programing
    ВСма [основная, 5, основная] 

    8.Как называСтся ΠΏΠΎΡ‚ΠΎΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Java?

    1.  class multithreaded_programing 
    2.  {
    3.  public static void main (String args []) 
    4.  {
    5.  Thread t = Thread.currentThread (); 
    6.  System.out.println (t); 
    7. } 
    8. } 

    a) основной
    b) ΠΏΠΎΡ‚ΠΎΠΊ
    c) систСма
    d) Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· упомянутых
    ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚

    ΠžΡ‚Π²Π΅Ρ‚: a
    ОбъяснСниС: Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся Thread [main, 5, main], Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ явно Π½Π΅ Π½Π°Π·Π²Π°Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ΠΈ Π½Π°Π·Π²Π°Π»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡƒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚, i: e main ΠΌΠ΅Ρ‚ΠΎΠ΄.ΠžΡ‚ΡΡŽΠ΄Π° ΠΈΡ… Π½Π°Π·Π²Π°Π½ΠΈΠ΅ «основныС».
    Π’Ρ‹Ρ…ΠΎΠ΄:
     $ javac multithreaded_programing. java
    $ java multithreaded_programing
    ВСма [основная, 5, основная] 

    Sanfoundry Global Education & Learning Series — Π―Π·Ρ‹ΠΊ программирования Java.

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

    Top Java Multithreading Interview Questions & Answers

    Π’ этом руководствС ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ вопросы для ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ с нСсколькими Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ с ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ.
    Π’ΠΎΡ‚ список вопросов для ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ ΠΏΠΎ многопоточности.
    1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Java?

    ΠžΡ‚Π²Π΅Ρ‚:
    ΠΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ лСгковСсным процСссом. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ наимСньшСй Ρ‡Π°ΡΡ‚ΡŒΡŽ процСсса, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ частями (ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ) процСсса.

    2. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ?

    ΠžΡ‚Π²Π΅Ρ‚:
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ — это ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Java ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, поэтому позволяСт Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° Π² наши Π΄Π½ΠΈ машина ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько процСссоров, поэтому нСсколько Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

    3. Как ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ Π² java?

    ΠžΡ‚Π²Π΅Ρ‚:
    Π•ΡΡ‚ΡŒ Π΄Π²Π° способа ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π² java

    • ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ класса ΠΏΠΎΡ‚ΠΎΠΊΠ°
    • ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса Runnable.

    Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° Java.

    4. Thread vs Runnable, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π»ΡƒΡ‡ΡˆΠ΅ для создания ΠΏΠΎΡ‚ΠΎΠΊΠ°?

    ΠžΡ‚Π²Π΅Ρ‚:
    РСализация интСрфСйса Runnable считаСтся Π»ΡƒΡ‡ΡˆΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ, Ρ‡Π΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ.

    • Java Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСствСнноС наслСдованиС, поэтому, Ссли Π²Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚Π΅ класс Thread, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв.
    • Runnable interface прСдставляСт собой Π·Π°Π΄Π°Ρ‡Ρƒ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса Thread ΠΈΠ»ΠΈ Executors.
    • Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ наслСдованиС, это ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства родитСля, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ класса. Но Ссли Π²Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚Π΅ класс ΠΏΠΎΡ‚ΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для создания ΠΏΠΎΡ‚ΠΎΠΊΠ°, это ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

    6. Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ сном ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ Π² java?

    ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

    ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅

    спящий Ρ€Π΅ΠΆΠΈΠΌ

    Π‘ΠΈΠ½Ρ…ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ

    контСкстный ΠΌΠ΅Ρ‚ΠΎΠ΄, Ссли Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈΠ· контСкста 907 Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ с использованиСм синхронизированного контСкста, ΠΎΠ½ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ IllegalMonitorStateException

    Π•Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· синхронизированного Π±Π»ΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

    Π’Ρ‹Π·ΠΎΠ²Ρ‹

    ΠœΠ΅Ρ‚ΠΎΠ΄ оТидания Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² классС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

    ΠœΠ΅Ρ‚ΠΎΠ΄ сна Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΈ находится Π² java. lang.Thread

    БнятиС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

    ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ освобоТдСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π²Ρ‹Π·Π²Π°Π½, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, Ссли ΠΎΠ½ содСрТит ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ

    ΠœΠ΅Ρ‚ΠΎΠ΄ сна Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ снимаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ

    УсловиС пробуТдСния

    Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° notify () ΠΈΠ»ΠΈ notifyAll () ΠΈΠ· класса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

    Пока Π½Π΅ истСчСт врСмя ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ()

    статичСский

    ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ нСстатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄

    sleep — статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄

    ΠžΡ‚Π²Π΅Ρ‚:
    Π’ java Π΅ΡΡ‚ΡŒ 5 состояний ΠΏΠΎΡ‚ΠΎΠΊΠ°

    Новый : ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π½ΠΎ ΠΎΠ½ Π΅Ρ‰Π΅ Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½.

    Runnable: Когда Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ запуска ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС Runnable. Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΎΠ½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, зависит ΠΎΡ‚ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

    Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚: Когда ΠΏΠΎΡ‚ΠΎΠΊ выполняСтся, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ состояниС.

    Π—Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΎ: Когда ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСсурсов ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° (ΠΈΠ·-Π·Π° соСдинСния ΠΏΠΎΡ‚ΠΎΠΊΠ°), ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ состояниС.

    ΠœΠ΅Ρ€Ρ‚Π²Ρ‹ΠΉ: Когда ΠΌΠ΅Ρ‚ΠΎΠ΄ выполнСния ΠΏΠΎΡ‚ΠΎΠΊΠ° возвращаСтся, ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ΅ состояниС.

    8. МоТСм Π»ΠΈ ΠΌΡ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ run Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ?

    ΠžΡ‚Π²Π΅Ρ‚:
    НСт, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ run для запуска ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ start, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Если Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ run Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΎΠ½ Π½Π΅ создаст Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ стСкС, Ρ‡Ρ‚ΠΎ ΠΈ основной.
    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ запуска Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ для запуска ΠΏΠΎΡ‚ΠΎΠΊΠ° для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

    9. МоТно Π»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π²Π°ΠΆΠ΄Ρ‹ Π² java?

    ΠžΡ‚Π²Π΅Ρ‚:
    НСт, послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ запустили ΠΏΠΎΡ‚ΠΎΠΊ, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ снова. Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ снова, ΠΎΠ½ выдаст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ IllegalThreadStateException.
    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ запуска ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π²Π°ΠΆΠ΄Ρ‹ для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

    10. Как Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ основной ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡Π°Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅?

    ΠžΡ‚Π²Π΅Ρ‚:
    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ соСдинСния для достиТСния Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ сцСнария.
    ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ соСдинСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ.

    11. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΄Π΅ΠΌΠΎΠ½Π°?

    ΠžΡ‚Π²Π΅Ρ‚:

    ДСмоничСскиС ΠΏΠΎΡ‚ΠΎΠΊΠΈ — это Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ с Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ услуги ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ.Π•Π³ΠΎ Тизнь зависит ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Если Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½, JVM ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ, Π΄Π°ΠΆΠ΅ Ссли ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΄Π΅ΠΌΠΎΠ½Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹. JVM Π½Π΅ ΠΆΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π΅ΠΌΠΎΠ½Π°.

    12. Как ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½Π°?

    ΠžΡ‚Π²Π΅Ρ‚: ΠœΠ΅Ρ‚ΠΎΠ΄ setDaemon ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Если Π²Ρ‹ установитС setDaemon (true), ΠΎΠ½ сдСлаСт ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ.

    13. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ синхронизация?

    ΠžΡ‚Π²Π΅Ρ‚:

    Бинхронизация — это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ рСсурсу Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.Когда Π΄Π²ΡƒΠΌ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ трСбуСтся доступ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ рСсурсу, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ‰ΠΈΠΉ рСсурс использовался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ этого Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, называСтся синхронизациСй.

    14. Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Π° синхронизация?

    Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся Π² этом Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

    Допустим, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство запросов, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ URL. Если Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π΄Π²Π° запроса ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, счСт ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсовмСстимым.

    Π‘Π΅Π· синхронизации:

    ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΡ€Π³.arpit.java2blog;

    Public class RequestCounter {

    private int count;

    public int incrementCount ()

    {

    count ++;

    счСтчик Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°;

    }

    }

    НапримСр:
    ΠŸΠΎΡ‚ΠΎΠΊ T1 Π²ΠΈΠ΄ΠΈΡ‚ счСт ΠΊΠ°ΠΊ 20 ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π΄ΠΎ 21. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΏΠΎΡ‚ΠΎΠΊ t2 Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄ΠΈΡ‚ счСт ΠΊΠ°ΠΊ 20 ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π΄ΠΎ 21. Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ подсчСт стал Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

    Π‘ синхронизациСй:

    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ двумя способами.

    • синхронизированный ΠΌΠ΅Ρ‚ΠΎΠ΄
    • синхронизированный Π±Π»ΠΎΠΊ

    Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синхронизированный с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ экзСмпляра ΠΈΠ»ΠΈ класса.

    синхронизированный ΠΌΠ΅Ρ‚ΠΎΠ΄

    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ вСсь ΠΌΠ΅Ρ‚ΠΎΠ΄ incrementCount () синхронизированным, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

    ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΎΡ€Π³.Π°Ρ€ΠΏΠΈΡ‚.java2blog;

    Public class RequestCounter {

    private int count;

    общСдоступная синхронизированная int incrementCount ()

    {

    count ++;

    счСтчик Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°;

    }

    }

    НапримСр:
    ΠŸΠΎΡ‚ΠΎΠΊ T1 Π²ΠΈΠ΄ΠΈΡ‚ счСт ΠΊΠ°ΠΊ 20 ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π΄ΠΎ 21. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΏΠΎΡ‚ΠΎΠΊ t2 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ счСт ΠΊΠ°ΠΊ 21 ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΄ΠΎ 22.

    синхронизированный Π±Π»ΠΎΠΊ

    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ для синхронизации критичСского Ρ€Π°Π·Π΄Π΅Π»Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ incrementCount (), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π±Π»ΠΎΠΊΡƒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

    ΠΏΠ°ΠΊΠ΅Ρ‚ org.arpit.java2blog;

    Public class RequestCounter {

    private int count;

    public int incrementCount () {

    synchronized (this) {

    count ++;

    счСтчик Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°;

    }

    }

    }

    НапримСр:
    ΠŸΠΎΡ‚ΠΎΠΊ T1 Π²ΠΈΠ΄ΠΈΡ‚ счСт ΠΊΠ°ΠΊ 20 ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π΄ΠΎ 21.Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΏΠΎΡ‚ΠΎΠΊ t2 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ счСтчик ΠΊΠ°ΠΊ 21 ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΄ΠΎ 22.

    15. НС ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ класса?
    16. ΠœΠΎΠ³ΡƒΡ‚ Π»ΠΈ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ статичСскиС ΠΈ нСстатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ?

    ΠžΡ‚Π²Π΅Ρ‚:
    Π”Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

    17. Если ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса синхронизирован, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса Π½Π΅ синхронизирован? ΠœΠΎΠ³ΡƒΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ двумя ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ?

    ΠžΡ‚Π²Π΅Ρ‚:
    Π”Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ потрСбуСтся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° для Π²Ρ…ΠΎΠ΄Π° Π² синхронизированный Π±Π»ΠΎΠΊ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсинхронизированный ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, поэтому ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

    18. БСзопасно Π»ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ синхронизированный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ синхронизированного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°?

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

    public synchronized void method1 () {

    method2 ();

    // Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄

    }

    public synchronized void method2 () {

    // Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄

    }

    ЀактичСски Π²Ρ‹ это Π΄Π΅Π»Π°Π΅Ρ‚Π΅.

    public void method1 () {

    synchronized (this) {

    method2 ();

    // Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄

    }

    }

    public void method2 () {

    synchronized (this) {

    // some code

    }

    }

    03

  • 67 Π—Π΄Π΅ΡΡŒ, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ 2 ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° 1, ΠΎΠ½ ΡƒΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ , поэтому Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ бСзопасно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ.

    19. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΡƒΠΏΠΈΠΊ?

    ΠžΡ‚Π²Π΅Ρ‚:
    Π’ΡƒΠΏΠΈΠΊ — это ситуация, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΆΠ΄ΡƒΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ рСсурс.

    НапримСр:

    ΠŸΠΎΡ‚ΠΎΠΊ 1 Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ 1 ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° 2. ΠŸΠΎΡ‚ΠΎΠΊ 2 Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ 2 ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° 1. Π’ этом сцСнарии ΠΎΠ±Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±ΡƒΠ΄ΡƒΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. бСсконСчно.

    20. Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ notify ΠΈ notifyall?

    ΠžΡ‚Π²Π΅Ρ‚:
    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ notify ΠΈ notifyall, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ различия.

    Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΡ‚ΡŒΡΡ:

    ΠŸΠ΅Ρ‰Π΅Ρ€Π° программирования

    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: Swing ΠΈ SwingWorker (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 15)
    Если Π²Ρ‹ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Swing (GUI) Π½Π° Java, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования класса SwingWorker для многопоточности. SwingWorker — это ΡƒΡΡ‚Ρ€Π°ΡˆΠ°ΡŽΡ‰ΠΈΠΉ, Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π΅Π½ ….
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 14)
    Π§Ρ‚ΠΎ это Π·Π° Π½Π°Π΄ΠΎΠ΅Π΄Π»ΠΈΠ²Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ InterruptedException? Π’ этом Π²ΠΈΠ΄Π΅ΠΎ я ΠΏΠΎΠΊΠ°ΠΆΡƒ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Java с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнного ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° прСрывания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².ПослС запуска Π²ΠΈΠ΄Π΅ΠΎ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ….
    Java Multithreading: Callable and Future (Π’ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 13)
    Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Callable ΠΈ Future Π² Java, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ вашим ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Future позволяСт Π²Π°ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои ΠΏΠΎΡ‚ΠΎΠΊΠΈ, провСряя, Π½Π΅ .
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: сСмафоры (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 12)
    Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ сСмафорам Π² Java.Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ограничСния количСства ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ рСсурсам, Π½ΠΎ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ систСм восстановлСния Ρ‚ΡƒΠΏΠΈΠΊΠΎΠ²Ρ‹Ρ… ситуаций ….
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: Ρ‚ΡƒΠΏΠΈΠΊ (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 11)
    ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Ρ‚ΡƒΠΏΠΈΠΊΠ° ΠΈ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ с этим ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π’ этом Π²ΠΈΠ΄Π΅ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ рассказываСтся, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ бСзопасно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ любоС количСство Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² любом порядкС, Π½Π΅ вызывая Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ try ….
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 10)
    Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс ReentrantLock Π² Java Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ синхронизированным Π±Π»ΠΎΠΊΠ°ΠΌ ΠΊΠΎΠ΄Π°.ReentrantLocks позволяСт Π²Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ synchronized, wait ΠΈ notify, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Ρ‰Π΅ нСсколько . ..
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 9)
    Π’ этом руководствС ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ шаблон ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ с использованиСм Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²; Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ, ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡ‚ΡŒ ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€-c ….
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 8)
    Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС ΠΏΠΎ оТиданию ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡŽ Π² Java; Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Object, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ ΡΠΏΠ°Ρ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Ρ€Π°Π·Π±ΡƒΠ΄ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚….
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 7)
    Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ шаблон ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ Π² Java с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса Java ArrayBlockingQueue. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ — это ситуация, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΡΠΎΠ·Π΄Π°ΡŽΡ‚ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ .
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: Π·Π°Ρ‰Π΅Π»ΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ отсчСта (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 6)
    Π’ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ ΠΏΠΎ использованию прСвосходного класса Java CountDownLatch для синхронизации дСйствий Π²Π°ΡˆΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².ПослС запуска Π²ΠΈΠ΄Π΅ΠΎ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ Π² полноэкранном Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ….
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: ΠΏΡƒΠ»Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 5)
    Руководство ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² Java с использованиСм ΠΏΡƒΠ»ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡƒΠ»ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с вашСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ Π·Π°Π΄Π°Ρ‡. ПослС запуска Π²ΠΈΠ΄Π΅ΠΎ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ….
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 4)
    Π­Ρ‚ΠΎ чСтвСртая Ρ‡Π°ΡΡ‚ΡŒ нашСго Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ руководства ΠΏΠΎ многопоточности Java.Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ я ΠΏΠΎΠΊΠ°ΠΆΡƒ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ для ускорСния слоТного ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈΠ½ΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: синхронизированная (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 3)
    Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΡ Ρ‡Π°ΡΡ‚ΡŒ нашСго Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ руководства ΠΏΠΎ многопоточности Java. Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ рассмотрим использованиС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова synchronized для ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ дСйствий ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈ прСдотвращСния ΠΈΡ… ошибок Π² ea ….
    Java Multithreading: Volatile — Basic Thread Communication (Video Tutorial Part 2)
    Вторая Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ° ΠΏΠΎ многопоточности Java.Π’ этом руководствС ΠΌΡ‹ рассмотрим использованиС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова volatile для связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³ΠΎΠ². ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ смотрим, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ нас ….
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java: запуск ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ, Ρ‡Π°ΡΡ‚ΡŒ 1)
    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ каТСтся Π²Π°ΠΌ Ρ‡Π΅Ρ€Π½Ρ‹ΠΌ искусством? Π­Ρ‚ΠΎ пСрвая Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ руководства Java ΠΏΠΎ многопоточности, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, надСюсь, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ. Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ рассмотрим Π΄Π²Π° способа .. .

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

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ?

    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ — это функция Java , которая позволяСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ частСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для максимального использования ЦП.КаТдая Ρ‡Π°ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ называСтся ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΡ‚ΠΎΠΊΠΈ — это лСгковСсныС процСссы Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса. … Start () Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ run () ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Thread.

    ΠšΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства многопоточности?

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

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΈ?

    Thread — это Π»Π΅Π³ΠΊΠΈΠΉ процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ нСзависимо ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ максимальноС использованиС ЦП, Ρ‚Π΅ΠΌ самым ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ЦП. Threads , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java быстрСС, выполняя нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

    Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ?

    ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Java позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсколько Π·Π°Π΄Π°Ρ‡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ соврСмСнныС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько процСссоров (Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Π΅ процСссоры — это ΠΌΠΎΠ·Π³ вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π° ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎ!).Один ЦП ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π·Π° Ρ€Π°Π· (Ссли ваши ЦП Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ гипСрпоточности, ΠΈ Π² этом случаС ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ)

    ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° многопоточности:

    • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π° счСт сокращСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
    • Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
    • Π˜ΠΌΠΏΡ€ΠΎΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ графичСского интСрфСйса
    • ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡
    • Π›ΡƒΡ‡ΡˆΠ΅Π΅ использованиС кэш-памяти Π·Π° счСт использования рСсурсов
    • Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° обслуТиваниС
    • Π›ΡƒΡ‡ΡˆΠ΅Π΅ использованиС рСсурсов ЦП

    НСдостатки многопоточности:

    • ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹Π΅ процСссы ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ тСстирования
    • Π‘Π»ΡƒΠΆΠ΅Π±Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста
    • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ возникновСния Ρ‚ΡƒΠΏΠΈΠΊΠ°
    • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
    • НСпрСдсказуСмыС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Java

    Π•ΡΡ‚ΡŒ Π΄Π²Π° способа ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π² Java:
    1) Π Π°ΡΡˆΠΈΡ€ΡΡ класс Thread.

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

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