Java Guru πŸ€“
13.3K subscribers
923 photos
15 videos
779 links
Канал с вопросами ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с собСсСдований!

По сотрудничСству ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @NadikaKir

Канал Π² ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ РКН: https://vk.cc/cJrSQZ

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Π—Π°Ρ‡Π΅ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ReentrantLock вмСсто synchronized?

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса ReentrantLock Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ Π±Π»ΠΎΠΊ synchronized. ΠŸΠΎΡ‚ΠΎΠΊ висит Π½Π° Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° lock() Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ своСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π½ΡΡ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’Π»Π°Π΄Π΅Ρ‚ΡŒ Π»ΠΎΠΊΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° synchronized ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. unlock(), ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Ρƒ ΠΈΠ· Π±Π»ΠΎΠΊΠ° синхронизации, освобоТдаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π±Π»ΠΎΠΊΠ° синхронизации, ReentrantLock Π΄Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ интСрфСйс для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ состоянии Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π»ΠΎΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΅Ρ‰Π΅ Π΄ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ, занят Π»ΠΈ ΠΎΠ½ сСйчас, сколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΆΠ΄ΡƒΡ‚ Π΅Π³ΠΎ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, сколько Ρ€Π°Π· подряд Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π»Π°Π΄Π΅Π» ΠΈΠΌ.

Π¨ΠΈΡ€Π΅ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. ΠšΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ lock(), Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ tryLock() с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ своСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ врСмя, Π° Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° – Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΆΠ΄Π΅Ρ‚, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ свободный Π»ΠΎΠΊ.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ – свойство fair. Π›ΠΎΠΊ с этим свойством обСспСчиваСт Β«ΡΠΏΡ€Π°Π²Π΅Π΄Π»ΠΈΠ²ΠΎΡΡ‚ΡŒΒ» ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ: ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠΉ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π°Π½ΡŒΡˆΠ΅. Π‘Π»ΠΎΠΊ synchronized Π½Π΅ Π΄Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ порядка.


Java GuruπŸ€“ #java
πŸ‘13πŸ”₯6❀2
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ запускС?
1πŸ‘7πŸ”₯3
Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ Lock.newCondition()?

Если Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса Lock ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Ρ‹ΡΠΎΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ Π±Π»ΠΎΠΊΠ° synchronized, Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅Π³ΠΎ спутника, интСрфСйса Condition – Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ notify/wait. Оба этих интСрфСйса относятся ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ java.util.concurrent.locks.

Как ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅, Condition Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² синхронизации «Условная пСрСмСнная». Один ΠΈΠ»ΠΈ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π·Π°Π²ΠΈΡΠ°ΡŽΡ‚ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅-кондишнС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° await (ΠΆΠ΄ΡƒΡ‚ удовлСтворСния условия). Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ signal ΠΈ signalAll (сигнализируСт ΠΎΠ± ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈΠΈ условия).

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Condition всСгда Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Ρ‚Π΅ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅, Π½ΠΎ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² Π½ΡŽΠ°Π½ΡΠ°Ρ… повСдСния. НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ трСбования Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅/сигнал Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½ΠΎΠΌ Π»ΠΎΠΊΠ΅ (Π°Π½Π°Π»ΠΎΠ³ трСбования, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ notify/wait всСгда Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² synchronized). Или ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ порядок получСния сигнала ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ поставлСнному вопросу, Condition всСгда связан со своим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° Lock, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Lock.newCondition() – СдинствСнный ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ создания кондишна.


Java GuruπŸ€“ #java
πŸ‘4❀2πŸ”₯2
Π§Π΅ΠΌ отличаСтся ReentrantLock ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Lock?

Lock – это интСрфСйс, ReentrantLock – Π΅Π³ΠΎ рСализация. Β«ReentrantΒ» Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ Π»ΠΎΠΊ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ этого свойства. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ synchronized Ρ‚ΠΎΠΆΠ΅ являСтся reentrant – влоТСнная синхронизация Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅-reentrant Π»ΠΎΠΊΠΎΠ² ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ – прСдставлСния класса StampedLock, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ asReadLock() ΠΈ asWriteLock().


Java GuruπŸ€“ #java
πŸ”₯6πŸ‘2
Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ReadWriteLock?

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ интСрфСйс ReadWriteLock прСдоставляСт потокобСзопасный Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ доступ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Π½Π° запись. Для этих Ρ†Π΅Π»Π΅ΠΉ Π² Π½Ρ‘ΠΌ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: readLock() ΠΈ writeLock(). Они Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠ΄ интСрфСйсом Lock.

Оба Ρ‚ΠΈΠΏΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ экзСмпляра ReadWriteLock связаны. Пока ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π·Π°Π±Π΅Ρ€Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° запись, сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ мСшая Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ readLock закрываСтся Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° с сСмантикой Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ чтСния» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ условного «рСсурса». Π’ критичСской сСкции ΠΊΠΎΠ΄Π° writeLock осущСствляСтся модификация рСсурса.

Бвойства этих Π»ΠΎΠΊΠΎΠ² Π·Π°Ρ‰ΠΈΡ‰Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΎΡ‚ ситуаций ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠΉ записи рСсурса ΠΈ чтСния Π²ΠΎ врСмя записи. Подобно copy-on-write коллСкциям, этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ становится Π²Ρ‹Π³ΠΎΠ΄Π½Ρ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° рСсурс Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ сильно Ρ‡Π°Ρ‰Π΅ Ρ‡Π΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ рСализуСтся классом ReentrantReadWriteLock, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ReentrantLock.


Java GuruπŸ€“ #java
πŸ‘6πŸ”₯4❀2
πŸ‘©β€πŸ’»ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ «Как ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΡΡ‚Π°Ρ‚ΡŒ Π“ΡƒΡ€Ρƒ Unicode?Β».

πŸ—“ 17 июля Π² 20:00 МБК
πŸ†“ БСсплатно. Π£Ρ€ΠΎΠΊ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… старта курса Β«Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΒ».

Ошибки Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… Π»ΠΎΠΌΠ°ΡŽΡ‚ прилоТСния, прСвращая тСкст Π² Β«Π°Π±Ρ€Π°ΠΊΠ°Π΄Π°Π±Ρ€ΡƒΒ». ПониманиС Ρ‚Π°Π±Π»ΠΈΡ† ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ β€” must-have Π½Π°Π²Ρ‹ΠΊ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

О Ρ‡Ρ‘ΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ:
βœ”οΈ ASCII, UTF-8, Unicode β€” WTF? Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, ΠΊΠ°ΠΊ Java Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ тСкст.
βœ”οΈ ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ„Π°ΠΉΠ»Ρ‹ Β«Π»ΠΎΠΌΠ°ΡŽΡ‚ΡΡΒ»? Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ/записи Π΄Π°Π½Π½Ρ‹Ρ….
βœ”οΈ Π›Π°ΠΉΡ„Ρ…Π°ΠΊΠΈ для юникода: Ρ€Π°Π±ΠΎΡ‚Π° с ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Π°ΠΌΠΈ ΠΈ русским языком.
βœ”οΈ Π‘Π΅ΠΊΡ€Π΅Ρ‚Ρ‹ JVM: ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

ΠšΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ интСрСсно:
ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ тСстировщикам, ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ с ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ.

πŸ”— Бсылка Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ: https://vk.cc/cNHZFM

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘4❀2πŸ”₯2
Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ StampedLock?

StampedLock – ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² синхронизации, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π² Java с вСрсии 8. ΠžΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρƒ ReadWriteLock: Π·Π°Ρ…Π²Π°Ρ‚ нСэксклюзивной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅), ΠΈ эксклюзивной (Π½Π° запись). Но Π΅ΡΡ‚ΡŒ Ρƒ этих классов ряд Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ Π² дСталях.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ReadWriteLock Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Lock, Ρ‚ΠΎ StampedLock Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ числа Ρ‚ΠΈΠΏΠ° long, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ называСтся Β«ΡˆΡ‚Π°ΠΌΠΏΠ°ΠΌΠΈΒ». Π¨Ρ‚Π°ΠΌΠΏ слуТит ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Π»ΠΎΠΊΠ°, ΠΎΠ½ пСрСдаСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ€Π°Π½Π΅Π΅ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ чтСния ΠΈΠ»ΠΈ записи. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΡ‚Π°ΠΌΠΏ 0 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ΡƒΠ΄Π°Π²ΡˆΠΈΠΉΡΡ Π·Π°Ρ…Π²Π°Ρ‚.

StampedLock Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ReentrantReadWriteLock – Π½Π΅ Ρ€Π΅Π΅Π½Ρ‚Ρ€Π°Π½Ρ‚. Π­Ρ‚ΠΎ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π±Γ³Π»ΡŒΡˆΡƒΡŽ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π½Π° программиста: ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Π΄Π»ΠΎΠΊ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

Π’ StampedLock Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. НовыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с прСфиксом try* Π½Π΅ висят Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ tryOptimistic* Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ tryConvert* Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Β«ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒΒ» заблокированности: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ readLock Π²ΠΎ writeLock, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

НС смотря Π½Π° ΠΏΠΎΡ…ΠΎΠΆΠ΅ΡΡ‚ΡŒ, StampedLock Π½Π΅ наслСдуСтся ΠΎΡ‚ ReadWriteLock. Но для совмСстимости Π² Π½Ρ‘ΠΌ прСдусмотрСны ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹-Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρ‹ asReadWriteLock, asReadLock ΠΈ asWriteLock.

Π˜Ρ‚ΠΎΠ³ΠΎ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° ΡˆΡ‚Π°ΠΌΠΏΠ°Ρ… Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‡Ρ‚ΠΎ ReadWriteLock, Π½ΠΎ Π΄Π°Π΅Ρ‚ большС возмоТностСй ΠΈ Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.


Java GuruπŸ€“ #java
πŸ‘7πŸ”₯6❀4
Π§Π΅ΠΌ отличаСтся CountDownLatch ΠΎΡ‚ CyclicBarrier?

CountDownLatch, дословно Β«Π—Π°ΠΏΠΎΡ€ с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ отсчСтом», – ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² синхронизации ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Java. Он останавливаСт ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΏΠΎΠΊΠ° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ счСтчик Π½Π΅ достигнСт нуля. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅, Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ await().

ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика задаСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ конструктора, Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 1 ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ countDown(). Π£Π·Π½Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ getCount(). ИзмСнСниС значСния счСтчика Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связано с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΈ ΠΊΠΎΠ³Π΄Π° ΡƒΠ³ΠΎΠ΄Π½ΠΎ.

CyclicBarrier – Π±Π°Ρ€ΡŒΠ΅Ρ€ для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ломаСтся ΠΏΡ€ΠΈ достиТСнии критичСской массы ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ…. Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ класс ΠΈΠ· Java Concurrency Framework. ΠŸΠΎΡ‚ΠΎΠΊ Ρ‚Π°ΠΊΠΆΠ΅ встаСт Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ await(). ΠžΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ parties, ΠΈΡ… Π»ΠΈΠΌΠΈΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ устанавливаСтся Π² конструкторС.

ВСхничСски, parties Π±Π°Ρ€ΡŒΠ΅Ρ€Π° ΠΈ count Π»Π°Ρ‚Ρ‡Π° – ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅, await Π±Π°Ρ€ΡŒΠ΅Ρ€Π° – это await+countDown Π»Π°Ρ‚Ρ‡Π°. Π’ Π±Π°Ρ€ΡŒΠ΅Ρ€Π΅ Ρ‚ΠΎΠΆΠ΅ доступна информация ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ состоянии Π±Π°Ρ€ΡŒΠ΅Ρ€Π° (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ isBroken, getParties ΠΈ getNumberWaiting).

Помимо этого, CyclicBarrier Π΄Π°Π΅Ρ‚ Π΄Π²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТности. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π² конструктор ΠΊΡ€ΠΎΠΌΠ΅ parties ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ коллбэк с дСйствиСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполнится Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΡ€Ρ‹Π²Π° Π±Π°Ρ€ΡŒΠ΅Ρ€Π°. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, этот ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ: ΠΌΠ΅Ρ‚ΠΎΠ΄ reset() насильно ΠΏΡ€ΠΎΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±Π°Ρ€ΡŒΠ΅Ρ€ ΠΈ устанавливаСт Π½ΠΎΠ²Ρ‹ΠΉ.

Оба этих ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π° ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π΅Π΄Π»ΠΎΠΊΠ°Ρ…. ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»Π°Ρ‚Ρ‡Π° ΠΈ Π±Π°Ρ€ΡŒΠ΅Ρ€Π° – сСмафор. Π’ Π½Ρ‘ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ достиТСнии счСтчиком нуля.


Java GuruπŸ€“ #java
πŸ‘7πŸ”₯4
Как ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ?

Π’ Java ΠΏΠΎΡ‚ΠΎΠΊ прСдставлСн классом Thread. Π’ Π½Ρ‘ΠΌ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ stop(), Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌ нСльзя, ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ deprecated. Вакая ТСсткая остановка ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρ‹, ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² нСконсистСнтном состоянии.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ. Π€Π»Π°Π³ выставляСтся ΠΈΠ·Π²Π½Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ провСряСтся Π² подходящий ΠΌΠΎΠΌΠ΅Π½Ρ‚. Если Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΊ просто Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° run(). Π’ качСствС Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„Π»Π°Π³Π° ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ пСрСмСнная Ρ‚ΠΈΠΏΠ° AtomicBoolean.

Когда Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сущСствуСт свой способ Π΅Ρ‘ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ сокСт, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚. Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ сработаСт ΠΌΠ΅Ρ‚ΠΎΠ΄ Thread.interrupt(). Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Object.wait() ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ· NIO.

ΠžΡΡ‚Π°Π½Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅. ΠŸΡ€Π΅Ρ€Π²Π°Π½Π½Ρ‹ΠΉ wait() выбросит InterruptedException,
Selector.select() Π²Π΅Ρ€Π½Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ осознанноС ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ с Ρ†Π΅Π»ΡŒΡŽ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π΄ ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ всё Π΅Ρ‰Ρ‘ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½Π°Π±Π΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Ρ„Π»Π°Π³Π°.

Java GuruπŸ€“ #java
πŸ‘8❀4πŸ”₯4
πŸ“’ Π’Ρ‹Ρ…ΠΎΠ΄Ρ†Ρ‹ ΠΈΠ· Jetbrains Π·Π°ΠΏΠΈΠ»ΠΈΠ»ΠΈ Π³ΠΎΠ΄Π½ΠΎΡ‚Ρƒ для Java/Kotlin-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².
 
Π‘Ρ‚Π°Ρ€Ρ‚Π°ΠΏ называСтся ❇️ Explyt.
Они Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΊΠ°Ρ‚ΠΈΠ»ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ·. 
Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅: это ΠΏΠ»Π°Π³ΠΈΠ½ Π² IDE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сам Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ тСсты с интСрСсными возмоТностями
βœ”οΈ Vibe debugging. Π—Π° счСт ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с IDE, ΠΏΠ»Π°Π³ΠΈΠ½ собираСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ исполнСнию ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ тСст ΠΏΠΎ этим Π΄Π°Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ экономит врСмя Π½Π° тСстировании ΠΈ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ошибки Π½Π° 80-90% (!) 
βœ”οΈ АгСнтский Ρ€Π΅ΠΆΠΈΠΌ. АссистСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΆΠΈΠ²Ρ‘Ρ‚ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈ слСдит Π·Π° ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ, сам Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ мСста ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ тСсты. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ„ΠΎΠ½Π΅, ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. 

πŸ‘‰ ΠšΠΎΠΌΡƒ интСрСсно - Π²ΠΎΡ‚ ссылка Π½Π° Ρ€Π΅Π»ΠΈΠ· ΠΈ установку ΠΏΠ»Π°Π³ΠΈΠ½Π°
πŸ‘6❀3πŸ”₯3
ΠŸΡ€ΠΈΠ²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования fork/join framework

Как слСдуСт ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΠΉ связанных классов, ForkJoinPool ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для рСкурсивных Π·Π°Π΄Π°Ρ‡. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° ΠΏΠΎΡ€Ρ†ΠΈΠΈ, ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ. ΠžΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ – это опСрация fork, Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ агрСгация Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ – join.

РСализация fork/join для самых популярных ΠΎΠ±Ρ‰ΠΈΡ… случаСв ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ нСпосрСдствСнно с классом ForkJoinPool Π½Π΅ потрСбуСтся. ΠœΠ΅Ρ‚ΠΎΠ΄ parallelSetAll ΠΈΠ· класса Arrays примСняСт fork/join для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ элСмСнтов массива; parallelPrefix для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ; parallelSort для сортировки.

Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ нСявно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… стримах. Π’ этом случаС Π»ΠΎΠ³ΠΈΠΊΡƒ fork опрСдСляСт Π΅Π³ΠΎ сплитСратор, Π° join Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Arrays.stream(new int[]{1, 2, 3, 4}).parallel().sum();


Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ†Π΅Π»Ρ‹Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ частных Π·Π°Π΄Π°Ρ‡, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ: Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π° с Π³Ρ€Π°Ρ„Π°ΠΌΠΈ, поиск Π΄Π°Π½Π½Ρ‹Ρ…. Для спСцифичных Π·Π°Π΄Π°Ρ‡ придСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ собствСнныС RecursiveTask, RecursiveAction, ΠΈΠ»ΠΈ Spliterator.


Java GuruπŸ€“ #java
πŸ‘6❀3πŸ”₯3
πŸ‘©β€πŸ’» Π’Π°ΡˆΠΈ Java-прилоТСния ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π΅Π΄Π²Π° Π΄Ρ‹ΡˆΠ°Ρ‚? ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ оптимизация ΠΊΠΎΠ΄Π° ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π·Π° скобками?

ΠšΡƒΡ€Ρ Β«Java Developer. AdvancedΒ» ΠΎΡ‚ OTUS β€” это Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² устройство JVM, Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄, сборщики мусора, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Π² ΠΎΠ±Π»Π°ΠΊΠ΅.
Наши экспСрты-ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚, ΠΊΠ°ΠΊ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ GC, ΡΠ½ΡΡ‚ΡŒ Π΄Π°ΠΌΠΏ памяти ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€œΠ³ΠΎΡ€ΡΡ‡ΠΈΠ΅β€ мСста, Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с Prometheus & Grafana ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ сСрвисы Π² Kubernetes.

🦾 Π’Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ JVM-ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ heap-Π΄Π°ΠΌΠΏΡ‹, ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Reactor ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ I/O, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΈ трассировку.

🎁 Π”Π°Ρ€ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ скидку Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ - JVADV7

➑️ ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ тСст ΠΈ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅: https://vk.cc/cNLoax

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❀4πŸ‘2πŸ”₯2
Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ двусторонний ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ?

Вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ даСтся Π² Π²ΠΈΠ΄Π΅ практичСской Π·Π°Π΄Π°Ρ‡ΠΈ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами: ΠΏΠ°Ρ€ΠΎΠΉ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, критичСскими сСкциями, потокобСзопасными коллСкциями. Но ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для этого случая Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ java.util.concurrent Π΅ΡΡ‚ΡŒ простой класс Exchanger.

Класс содСрТит СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ V exchange(V x). Один ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ встаСт Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅. ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ exchange со своСй ΠΏΠΎΡ€Ρ†ΠΈΠ΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’ качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

На основС класса Exchanger ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выполняСт свою Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΈ складываСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² Π±ΡƒΡ„Π΅Ρ€. Π’ качСствС Π±ΡƒΡ„Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ любой ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Когда ΠΎΠ½ заполняСтся, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ, пустой Π±ΡƒΡ„Π΅Ρ€. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΄Π²Π° Π±ΡƒΡ„Π΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ, Π½Π΅ выдСляСтся лишний Ρ€Π°Π· ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π½Π΅ нагруТаСтся GC. Π”Π°Π»Π΅Π΅ ΠΈΠ· ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ длинная многопоточная Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.


Java GuruπŸ€“ #java
❀7πŸ”₯4πŸ‘1
πŸ‘‡ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ (Builder)

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

ИспользованиС:

🟑 Когда Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с большим количСством ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈ Π½Π΅ всС ΠΈΠ· Π½ΠΈΡ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹.
🟑 Когда процСсс создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ выполнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… шагов ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ.
🟑 Π’ случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ прСдставлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, тСкстовоС ΠΈ графичСскоС).

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

1️⃣ Π£ΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ созданиС слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², дСлая процСсс понятным ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ.
2️⃣ ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ вариациями Π±Π΅Π· нСобходимости дублирования ΠΊΠΎΠ΄Π°.
3️⃣ РаздСляСт Π»ΠΎΠ³ΠΈΠΊΡƒ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚ Π΅Π³ΠΎ структуры, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π°.

НСдостатки:

1️⃣ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π·Π° счёт создания Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².
2️⃣ ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ для простых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с нСбольшим количСством ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².
3️⃣ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ внимания ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ шагами.

πŸ“Œ ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Builder ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΎ. НапримСр, ΠΏΡ€ΠΈ создании слоТных ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ для HTTP-запросов (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Ρ‚Π΅Π»ΠΎ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹), построСнии графичСских интСрфСйсов ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Builder ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ понятным ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ создания конструкций с Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ конструкторами.

@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
❀8πŸ‘4πŸ”₯1
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс?

Π’Π°ΠΊ называСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт Ρ‚ΠΈΠΏ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, коллбэк.

Π§Ρ‚ΠΎΠ±Ρ‹ компилятор считал интСрфСйс Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ, этот интСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ СдинствСнный абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ любоС количСство Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с Ρ‚Π΅Π»ΠΎΠΌ. ΠŸΠ΅Ρ€Π΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса Object Ρ‚Π°ΠΊΠΆΠ΅ игнорируСтся.

Никаких Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ накладываСтся: ΠΎΠ½ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π² Ρ‚ΠΈΠΏΠ°Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ список выбрасываСмых ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (checked ΠΈ unchecked).

Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ всСх этих условий, Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ разновидности Ρ‚ΠΈΠΏΠΎΠ² ΠΊΡ€ΠΎΠΌΠ΅ interface Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ интСрфСйсами.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс принято ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ
@FunctionalInterface. НаличиС этой Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π½ΠΎ ΠΎΠ½ΠΎ Π΄Π°Ρ‘Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ: Π΅Ρ‘ присутствиС Π½Π° Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ спровоцируСт ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… интСрфСйсов: Callable, Supplier, Comparable.


@javatasks #java
❀5πŸ”₯4πŸ‘2
Π—Π°Π΄Π°Ρ‡ΠΈ с собСсСдований: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, являСтся Π»ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ поиска (middle)

β€” Как ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ поиска (BST)?

πŸ“Œ ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

- Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска (BST) β€” это Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° всС значСния Π² Π»Π΅Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²Π΅ мСньшС значСния ΡƒΠ·Π»Π°, Π° всС значСния Π² ΠΏΡ€Π°Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²Π΅ большС.
- Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСкурсивный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с отслСТиваниСм допустимых Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°.
- Как ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡƒΠ·Π»Π°Ρ… Π΄Π΅Ρ€Π΅Π²Π°?

РСализация с числами Π² ΡƒΠ·Π»Π°Ρ… Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ πŸ‘†

@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
❀7πŸ‘3πŸ”₯2
Π§Π΅ΠΌ отличаСтся final finally finalize?

Π’Π΅ΠΌ, Ρ‡Ρ‚ΠΎ это Π΄Π°ΠΆΠ΅ синтаксичСски Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ. Как ΠΈ вопрос ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Object, это способ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€.

finalize – ΠΌΠ΅Ρ‚ΠΎΠ΄-Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈΠ· Object.

final – ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСтся ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, полям, ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ классам. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ становится нСизмСняСмым ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π€ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ нСльзя ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² наслСдниках. Π€ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ класс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ наслСдников Π²ΠΎΠΎΠ±Ρ‰Π΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ API ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ.

Когда Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ локальная пСрСмСнная внСшнСй области видимости, ΠΎΠ½Π° обязана Π±Ρ‹Ρ‚ΡŒ
effectively final. Π’ этом случаС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово final Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всё Ρ€Π°Π²Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

finally – Ρ‡Π°ΡΡ‚ΡŒ языковой конструкции try-catch-finally.

Π›ΡŽΠ±ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° try ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ исполнСниС Π² самый ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ catch (ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ). Π­Ρ‚ΠΈΠΌ ΠΏΡ€ΠΎΠ΄ΠΈΠΊΡ‚ΠΎΠ²Π°Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈ catch Π² строгом порядкС, ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ-наслСдника, ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ. Π’ случаС multicatch Ρ‚ΠΎΡ‚ ΠΆΠ΅ порядок Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒΡΡ ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ catch.
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€ΠΎ порядок.

ПослС выполнится Π±Π»ΠΎΠΊ finally. ВыполняСтся ΠΎΠ½ Π² любом случаС, Π±Ρ‹Π»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ использованиС – освобоТдСниС рСсурсов, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ дСйствия.

Для Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классов («рСсурсов») добавляСтся интСрфСйс AutoCloseable, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΊΠΎΠ΄ Π±Π»ΠΎΠΊΠ° final выносится Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ close ΠΈ вызываСтся нСявно Π² ΠΊΠΎΠ½Ρ†Π΅
try-with-resources. Если Π² этой конструкции присутствуСт ΠΈ явный final, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ послС.

Java GuruπŸ€“ #java
❀6πŸ‘4πŸ”₯4
Π§Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ checked ΠΈ unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ?

Вопрос Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, ΡΡƒΡ‚ΡŒ вопроса – объяснСниС ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описано Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Ρ‹Π²Π°ΡŽΡ‚ checked ΠΈ unchecked. Checked трСбуСтся ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² сигнатурС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ throws; ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² throws Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅. Unchecked ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π°ΠΆΠ΅ Ссли ΡƒΠΊΠ°Π·Π°Π½Π° Π² throws.

πŸ”˜Throwable – Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для всСго Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ throw ΠΈ Π² конструкции try-catch
πŸ”˜RuntimeException – Β«Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅Β» unchecked-ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
πŸ”˜Error – unchecked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Β«ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹Β» прилоТСния. НС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ (хотя тСхничСски ΠΌΠΎΠΆΠ½ΠΎ). ВСорСтичСски JVM ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΌ состоянии ΠΈ Π½Π΅ Π΄Π°Π²Π°Ρ‚ΡŒ большС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ
πŸ”˜Exception (ΠΊΡ€ΠΎΠΌΠ΅ RuntimeException) – checked ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
❀5πŸ”₯4πŸ‘3
Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово default?

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ (с Java 1.5) это слово использовалось для объявлСния Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ³ΠΎ значСния элСмСнтов Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.

Π’ Java 8 вмСстС с лямбдами ΠΈ стримами появилась острая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ стандартныС интСрфСйсы Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Никто СстСствСнно Π½Π΅ собирался Π»ΠΎΠΌΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΈ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова default ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ интСрфСйса позволяСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ Ρ‚Π΅Π»ΠΎ. ВсС Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ старых интСрфСйсов ΡΠ½Π°Π±ΠΆΠ°ΡŽΡ‚ΡΡ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅Π³ΠΎ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ вызываСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ синтаксисом, Ρ‡Ρ‚ΠΎ ΠΈ внСшний класс ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ: InterfaceName.super.methodName().

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ подошли Π΅Ρ‰Π΅ Π½Π° шаг ΠΊ ввСдСнию Π² Java бСспроблСмной вСрсии мноТСствСнного наслСдования – примСсям (mixin). Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ состояния, поэтому ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ примСси всё Π΅Ρ‰Ρ‘ нСдоступны.


@javatasks #java
πŸ‘7πŸ”₯4❀1
Π’ ΠΊΠ°ΠΊΠΎΠΌ порядкС ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹?

ΠŸΡ€Π°Π²ΠΈΠ»Π° примСнСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² поля описаны Π² JLS 8.3.1:
πŸ”˜ΠΠ΅Π»ΡŒΠ·Ρ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄Π²Π°ΠΆΠ΄Ρ‹;
πŸ”˜ΠΠ΅Π»ΡŒΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ указания Π²ΠΎΠΎΠ±Ρ‰Π΅ свободный, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:
@Аннотации, доступ,
static final transient volatile


ВрСбования для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° находятся Π² JLS 8.4.3:
πŸ”˜Π’Π΅ ΠΆΠ΅ трСбования, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊ полю;
πŸ”˜Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚Π½ΠΎ с abstract ΠΊΡ€ΠΎΠΌΠ΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ protected ΠΈΠ»ΠΈ public;
πŸ”˜native ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ strictfp.

И Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ трСбуСтся, Π½ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ порядок:
@Аннотации, доступ,
abstract static final synchronized native strictfp

Java GuruπŸ€“ #java
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘10πŸ”₯6❀1