1. Главная
  2. Библиотека
  3. Программирование
  4. Определи порядок захвата монитора. Реализуй логику метода isLockOrderNormal, который должен определять, соответствует ли...

Определи порядок захвата монитора. Реализуй логику метода isLockOrderNormal, который должен определять, соответствует ли порядок synchronized блоков в методе someMethodWithSynchronizedBlocks порядку передаваемых в него аргументов. Условие: Метод

«Определи порядок захвата монитора. Реализуй логику метода isLockOrderNormal, который должен определять, соответствует ли порядок synchronized блоков в методе someMethodWithSynchronizedBlocks порядку передаваемых в него аргументов. Условие: Метод»
  • Программирование

Условие:

Реализуй логику метода isLockOrderNormal, который должен определять:
соответствует ли порядок synchronized блоков в методе someMethodWithSynchronizedBlocks - порядку передаваемых в него аргументов.
В случае, если сначала происходит синхронизация по o1, а потом по o2, метод должен вернуть true.
Если наоборот - false.

Требования:
• Метод isLockOrderNormal должен возвращать true в случае, если синхронизация в методе someMethodWithSynchronizedBlocks происходит сначала по объекту o1, а потом по o2.
• Метод isLockOrderNormal должен возвращать false в случае, если синхронизация в методе someMethodWithSynchronizedBlocks происходит сначала по объекту o2, а потом по o1.
• Метод isLockOrderNormal НЕ должен быть приватным.
• Класс Solution НЕ должен быть объявлен с модификатором final.

package com.javarush.task.task27.task2707;

/*
Определяем порядок захвата монитора
*/

public class Solution {
public void someMethodWithSynchronizedBlocks(Object obj1, Object obj2) {
synchronized (obj1) {
synchronized (obj2) {
System.out.println(obj1 + " " + obj2);
}
}
}

public static boolean isLockOrderNormal(final Solution solution, final Object o1, final Object o2) throws Exception {
//do something here
return false;
}

public static void main(String[] args) throws Exception {
final Solution solution = new Solution();
final Object o1 = new Object();
final Object o2 = new Object();

System.out.println(isLockOrderNormal(solution, o1, o2));
}
}

Решение:

Для реализации метода `isLockOrderNormal`, который будет определять порядок захвата мониторов в методе `someMethodWithSynchronizedBlocks`, нам нужно выполнить следующие шаги: 1. **Создать экземпляр класса Solution**: Мы уже имеем экземпляр класса `Solution`, который будет использоваться для вызова метода `someMethodWithSynchronizedBlocks`. 2. **Создать два объекта для синхронизации**: В методе `main` у нас уже есть два объекта `o1` и `o2`, которые мы будем передавать в метод `isLockOrderNormal`. 3. **Использовать потоки для проверки порядка синхронизации**: Мы создадим два потока, которые б...

Не нашел нужную задачу?

Воспользуйся поиском

Выбери предмет