Управление несколькими эксклюзивными блокировками для набора уникальных значенийJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Управление несколькими эксклюзивными блокировками для набора уникальных значений

Сообщение Anonymous »

Предположим, у меня есть несколько строковых значений (динамически генерируемых) и пул потоков, и я хочу, чтобы каждое строковое значение в любой момент времени принадлежало не более чем одному потоку. Так, например, если строка "foo" заблокирована потоком T1 в какой-то период времени, все остальные потоки ожидают обработки "foo" (или любой другой строки, равной в "foo" с точки зрения Object.equals()) должен дождаться, пока поток T1 снимет блокировку.
Поэтому я хочу реализовать следующий интерфейс:

Код: Выделить всё

interface Lock {
void lock(@NonNull String key);

void unlock(@NonNull String key);
}
Как я уже сказал, любой поток, входящий в метод lock(String), должен ждать (или ждать с прерыванием, или ждать с тайм-аутом), если ключ уже заблокирован какой-то другой поток.
И метод unlock(String) должен эффективно разблокировать ключ, выдавая исключение в двух случаях:
  • При попытке разблокировать ключ, который не заблокирован
  • При попытке разблокировать ключ, заблокированный каким-то другим потоком (не текущим).
Видимо, при реализации вышеуказанного интерфейса мне приходится связать экземпляр ReentrantLock с любым ключом, который вот-вот заблокируется, на все время, пока он остается заблокировано.
Как реализовать Интерфейс LockByKey? Какие примитивы параллелизма из пакета java.util.concurrent наиболее подходят для этой задачи?

Подробнее здесь: https://stackoverflow.com/questions/792 ... que-values
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»