Ось кілька запитань, які я нещодавно задавав респондентам, які кажуть, що знають паралельність Java:
- Поясніть небезпеку «видимості пам’яті» - спосіб JVM може переупорядкувати певні операції над змінними, незахищеними монітором і не оголошеними
volatile, таким чином, щоб один потік не бачив зміни, внесені іншим потоком. Зазвичай я запитую це, показуючи код, де існує ця небезпека (наприклад,NoVisibilityприклад у Лістингу 3.1 з «Конкурсу Java на практиці» Goetz та ін.) І запитую, що не так. - Поясніть, як
volatileвпливає не тільки фактична заявлена зміннаvolatile, але й будь-які зміни змінних, внесених потоком, перш ніж вона змінюєvolatileзмінну. - Чому ви можете використовувати
volatileзамість цьогоsynchronized? - Реалізуйте змінну умови за допомогою
wait()таnotifyAll(). Поясніть, для чого слід використовуватиnotifyAll(). Поясніть, чому змінну стану слід перевірити за допомогоюwhileциклу.
Моє запитання - це відповідні чи занадто просунуті питання, щоб запитати когось, хто каже, що знає Java одночасність?
І хоча ми до цього звертаємось, чи вважаєте ви, що від того, хто працює у спільній валюті на Java, слід очікувати, що той, хто має надмірні знання про збирання сміття на Java?
notifyAll()"Я не вірю в виконання роботи планувальника ОС, тому я використовую notify()"