Как распределенная блокировка Mule для динамических замков управляется и освобождается в памяти между несколькими рабочими процессами

Я создаю замки, но имена замков динамические. Для данного businessCaseId может быть много сообщений, поэтому будет создано много блокировок.

          lock = lockFactory.createLock(vars.businessCaseId)
    lock.lock()
    try{
        //business function implementation for the given businessCaseId

Могу ли я узнать, что произойдет с объектом блокировки после lock.unlock()? (Да, блокировка снята) Он удален из памяти/подходит для GC Или остался в памяти Или что? Должен ли я установить значение null ? lock = null?

Я сослался на следующий документ, но не так много информации. https://docs.mulesoft.com/mule-runtime/4.4/distributed-locking

1 ответ

Установка переменной Java в значение null для указания сбора мусора обычно бесполезна. Если есть другие ссылки, сборщик мусора не будет. Если нет других ссылок, зачем беспокоиться? Если есть другие ссылки, это бесполезно. Это распространенный вопрос в Java, не связанный с какими-либо функциями Mule. В прошлом об этом спрашивали в Stackoverflow . Вместо этого я отвечу на конкретные темы Mule.

В этом конкретном случае все зависит от реализации, действительно ли разблокировка освободила объект или нет после разблокировки. Очевидно, где-то есть коллекция. В противном случае использование имени для идентификации блокировок между потоками не сработает.

Поскольку это не задокументировано, я бы не беспокоился, пока вы не обнаружите реальную проблему, связанную с этим. Например, увеличивается память, которая в дампе кучи может быть связана с блокировками Mule.

Другие вопросы по тегам