На який монітор йдеться в одночасному програмуванні на Java?
Коли я прочитав, що "кожен об'єкт асоціював монітор", що це означає?
Це спеціальний об’єкт?
На який монітор йдеться в одночасному програмуванні на Java?
Коли я прочитав, що "кожен об'єкт асоціював монітор", що це означає?
Це спеціальний об’єкт?
Відповіді:
Монітор - це механізм контролю паралельного доступу до об'єкта.
Це дозволяє:
Нитка 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
Нитка 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
Це перешкоджає потокам 1 і 2 одночасно отримувати доступ до контрольованого (синхронізованого) розділу. Один запуститься, а монітор не дозволить іншому отримати доступ до регіону до того, як закінчиться перший.
Це не особливий об’єкт. Це механізм синхронізації поміщений в корені ієрархії класів: java.lang.Object
.
Є також wait
і notify
методи , які будуть також використовувати монітор об'єкта для зв'язку між різними потоками.
Class
об'єктом для статичних методів. Якщо у вас вже є синхронізований метод1 () і ви оголошуєте метод2 () синхронізованим, нові монітори не створюються, і фактично виклик будь-якого методу (на одному об'єкті) намагатиметься заблокувати той же монітор. Це часто виловлює новачків.
Монітор - це сутність, яка має як замок, так і набір очікування . На Java будь-якийObject
може служити монітором.
Для детального пояснення того, як монітори працюють на Java, рекомендую прочитати розділ « Механіка монітора» паралельного програмування на Java (попереднє посилання відображає попередній перегляд у книгах Google, і цей розділ доступний для читання).
Wakes up all threads that are waiting on this object's monitor.
Jac каже про notifyall (), що я отримую, це об'єкт - це підтримувати (за допомогою внутрішньої сутності / об'єкта) те, що всі потоки чекають блокування, що внутрішня сутність / об'єкт називається монітором?
Мова Java та система виконання підтримують синхронізацію потоків за допомогою моніторів.
Монітор асоціюється з певним елементом даних (змінною умови) і функціонує як блокування цих даних. Коли потік тримає монітор для деякого елемента даних, інші потоки блокуються і не можуть перевіряти або змінювати дані.
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
Механізм для контролю доступу до об'єктів по одному
Монітор - це конструкція синхронізації, яка дозволяє потокам мати як взаємне виключення, так і можливість чекати (блокувати), коли певна умова стане істинним.
Монітори також мають механізм сигналізації інших потоків про те, що їх умова виконана. Це сутність, яка має як замок, так і набір очікування. У Java будь-який Об'єкт може служити монітором.
У віртуальній машині Java кожен об'єкт і клас логічно пов'язаний з монітором. Для реалізації можливостей взаємного виключення моніторів з кожним об'єктом і класом асоціюється замок (іноді його називають mutex). Це називається семафором в термінах операційних систем, mutex - це бінарний семафор.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
монітор асоціюється з об'єктом або членом даних, який набувається при введенні члена даних або об'єкта - це блок синхронізації (критичний розділ) і відпускається при виході.