перекрывали я создал флаг isSmarCardFree, если он true, то ставлю false отправляю запрос в карту, получаю ответ и снова меняю флаг на true.
Но есть довольно длительные операции и я могу в момент, пока смарт карта занята обратиться к ней с какой нибуль еще операцией, но она не выполнится, потому как флаг на данный момент false.
Может есть паттерн какой, что эта операция встанет в очередь пока флаг isSmarCardFree не станет равен true?
Паттерн Очередь
спасибо! ппц я тупанул..
Много способов, на самом деле. Можно вручную написать Можно через треды Через синхронизацию... Через корутины Хм, а какое стандартное решение?
используй шаред флоу или ченел для очереди и убери этот свой флажок)
да тут выше уже писал, что шаред флоу гамно )
ArrayBlockingQueue<E> Из одного элемента. Запущенная задача вставляет в очередь элемент и извлекает по завершении. Если очередь полна то put() будет стоять ожидать пока прошлая операция не очистит место.
Так. А в чём выгода от synchronized(object)? Один фиг блокируется
Semaphore
Обсуждают сегодня