2016-10-10 7 views
0

Как я могу реализовать службу (класс), где есть три уровня пользователей (потоков), которые имеют к ней доступ с другим приоритетом?Java: параллелизм с пользователями с тремя уровнями

  • темы lv1: приоритет над всеми; когда они используют службу, никто другой не допускается
  • нити LV2: приоритет над LV3
  • нити LV3: обычные пользователи

В идеале,

  • основной(): начинать темы с
  • service(): координировать доступ к некоторым данным
  • пользователей: запросить доступ к данным, использовать его, освободить доступ

Есть ли хороший способ сделать это?

+0

Возможно, у вас есть код, который вы использовали –

+0

Я думаю, что ваши уровни приоритета противоречат между 1 и 2. Как lv1 может иметь «приоритет над всеми», когда явный случай для lv2 должен иметь «приоритет над lv1»? Это похоже на тупик, который приведет к –

+0

@EvanBechtol: извините, я имел в виду lv3; fixed – fawim

ответ

0

Возможно, вы можете достичь уровня эксклюзивности, используя три ReadWriteLock s, по одному для каждого уровня.

Пользователи уровня 3 будут использовать блокировку чтения на level3Lock.

Пользователи уровня 2 будут использовать блокировку записи на level3Lock и блокировку чтения на level2Lock - ни один пользователь уровня 3 не будет иметь доступа, пока пользователь уровня 2 будет работать с данными.

Пользователи уровня 1 продолжают традицию и записывают блокировку как блокировки уровня 3, так и уровня 2.

Однако - это только реализует эксклюзивность. Если вам действительно нужны приоритетные функции, вы можете контролировать доступ с помощью очереди - PriorityQueue - очевидный выбор. Правильно настроенная Executor будет обрабатывать задачи из этой очереди.

+0

Мне это нравится! (вы просто поменяли lv2 на lv3, но это нормально, мне нравится идея) – fawim