|
|
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Какой оптимальный способ получить блокировку на действие пользователя? Иначе говоря, как если бы замок(lock) был для каждого пользователя объекта свой. Что-то вроде: Код: java 1. 2. 3. 4. 5. 6. или Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 11:18 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdm, Вполне толковые советы: http://stackoverflow.com/questions/5639870/simple-java-name-based-locks http://stackoverflow.com/questions/16821767/per-key-blocking-map-in-java ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 12:14 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, а что если использовать ConcurrentMap c AtomicBoolean.compareAndSet()? Плохо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 12:22 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdmBlazkowicz, а что если использовать ConcurrentMap c AtomicBoolean.compareAndSet()? Плохо? А он то и не нужен. Методы уже есть в ConcurrentMap. Достаточно просто держать в мапе текущие блокировки, а не вообще всех пользователей. И, кстати, ConcurrentMap это интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 12:24 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, т.е например Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 13:59 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdm, Да, при этом не забывать удалять в finally блоке. Ну, и создавать новый объект смысла нет, можно то же userId в value положить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 14:08 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdm, http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#newSetFromMap(java.util.Map) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 14:09 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ваше последнее сообщение к этому? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 14:25 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdm if(locks.add(userId)) { Гоню. Методы ConcurrentMap нужны же. Тогда остаётся lock.putIfAbsent(userId, userId) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 14:30 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, я вот подумал, а чем плох просто add(ConcurrentSet). Т.е. проверка add(userId) == true ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 15:28 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdmBlazkowicz, я вот подумал, а чем плох просто add(ConcurrentSet). Т.е. проверка add(userId) == true ? А и правда. Тоже должно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 15:39 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, в этом случае оптимальной реализацией Set будет Код: java 1. 2. а не ConcurrentSkipListSet, CopyOnWriteArraySet? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 15:58 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdm, Оптимальность это понятие субъективное. Уверен что в вашем случае будет глубоко фиолетово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 16:06 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо за ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2015, 16:30 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdm, а можете по простому написать, что вы хотите делать? Просто интересно стало, что в этой ветке разбираете :) rdmКакой оптимальный способ получить блокировку на действие пользователя? Иначе говоря, как если бы замок(lock) был для каждого пользователя объекта свой. Типа прав (имеет доступ к определенному экшену или нет) на каждое действие? Или что? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 08:40 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
qi_ip, Запретить одному и тому же пользователю определенное действие конкурентно из разных потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 12:33 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Blazkowiczqi_ip, Запретить одному и тому же пользователю определенное действие конкурентно из разных потоков. Благодарю за коммент ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 14:44 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
qi_ip, Blazkowicz ответил. Допустим есть метод А и метод Б. Надо что бы пользователь не мог выполнять одновременно и А и Б. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 21:01 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdm, Ты лучше объясни, как у тебя юзверь конкурирует сам с собой. Обычно в веб стараются даже разных юзверей не сталкивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 23:10 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Например, хибер просто послал сложности подальше и сказал что обеспечивает изолированность только сессионную. Т.е одна сессия - нефиг конкурировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 23:14 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Хотя наверно свой сервер пишем. Тогда да. Imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 23:16 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
Petro123, к примеру, послал пользователь одновременно два запроса на сервер вот и конкурирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2015, 09:24 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdmPetro123, к примеру, послал пользователь одновременно два запроса на сервер вот и конкурирует. если абстрактно, сервер - это СУБД, то на пользователя даётся новый экземпляр соединения (коннект), если он способен нажать одновременно 2 кнопки физически. Если не способен и разные, то пул или ГУИ не отожмёт кнопку пока первый не выполнится. Т.е. на любую блокировку нужно обслуживание и обвязка: Польз - ГУИ - Соединение - Сервер На каком этапе мы тут блокируем большой вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2015, 09:49 |
|
||
|
Lock для пользователя.
|
|||
|---|---|---|---|
|
#18+
rdm Как тебе правильно посоветовали Petro123Польз - ГУИ - Соединение - Сервер На каком этапе мы тут блокируем большой вопрос. Тут надо пояснить, что ситуации бывают разные. Например, у тебя полный RESTFull головного мозга и балансировщик нагрузки про это в курсе и посылает запросы от одного ip на разные узлы кластера. То сам бог велел получить блокировку из некого общего менеджера транзакций (ну если сервер приложений без него, то взять у БД, или еще у какого-то объекта). Если же все обрабатывается в одном контейнере кофе машины, то можно подумать про ее блокировки (synchronized блоки, reentrant lock и т.п. в зависимости от предполагаемой нагрузки и конкуренции). Блокировать в web гуе не рекомендую - пользователи они же не дураки, они завсегда знают как открыть одну и ту же страничку в разных окнах браузера и асинхронно жамкнуть на кнопку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2015, 11:13 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39088014&tid=2124749]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
33ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 325ms |

| 0 / 0 |
