РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1023 of 1163 menu

Метод tryLock

Метод tryLock класса Lock пытается захватить блокировку, не блокируя поток на неопределённое время. В отличие от метода lock, который ждёт освобождения блокировки бесконечно, tryLock сразу возвращает true, если блокировка свободна, и false, если она занята. Существует две перегрузки метода: без параметров и с параметрами времени ожидания. В первый вариант параметры не передаются. Во второй вариант первым параметром передаётся время ожидания, вторым - единица измерения времени TimeUnit.

Синтаксис

lock.tryLock() lock.tryLock(timeout, unit)

Пример

Давайте захватим блокировку и проверим результат без ожидания:

import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Main { public static void main(String[] args) { Lock lock = new ReentrantLock(); boolean res = lock.tryLock(); System.out.println(res); if (res) { lock.unlock(); } } }

Результат выполнения кода:

true

Пример

Давайте проверим, что повторный захват уже занятой блокировки без ожидания вернёт false:

import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Main { public static void main(String[] args) { Lock lock = new ReentrantLock(); lock.lock(); boolean res = lock.tryLock(); System.out.println(res); lock.unlock(); } }

Результат выполнения кода:

false

Пример

Давайте захватим блокировку с ожиданием в 1 секунду:

import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Main { public static void main(String[] args) throws InterruptedException { Lock lock = new ReentrantLock(); boolean res = lock.tryLock(1, TimeUnit.SECONDS); System.out.println(res); if (res) { lock.unlock(); } } }

Результат выполнения кода:

true

Смотрите также

  • метод lock,
    который захватывает блокировку с ожиданием
  • метод unlock,
    который освобождает блокировку
  • класс ReentrantLock,
    который является реализацией Lock
  • класс TimeUnit,
    который задаёт единицу измерения времени
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить