2016-09-09 5 views
1

Я запускаю 2 задания таймера. это что-то вродеКак создать блокировку в двух задачах таймера Java надежно (так будет ждать, когда другой будет запущен)

@Autowired 
private Insertion insertion; 

@Autowired 
private Updation updation; 
  1. вставить данные в БД

    timer.schedule(insertion,1000,5000) 
    
    public run() { 
        if(!Updationhappening) { 
         //start insertion 
        } 
        else { 
         //wait 
        } 
    } 
    
  2. обновление, данные с чем-то

    timer.schedule(updation,1000,5000) 
    
    if(!InsertionHappening) { 
        //start updation 
    } else { 
        //wait 
    } 
    

Однако я хочу, чтобы приостановить обновление, когда вставка бежит .

Я знаю, может быть, я могу сделать это с изменчивой переменной или Locks, но я не могу получить никакой реализации об этой системе блокировки. Можно ли предложить пример реализации между 2 различными узлами

Спасибо заранее

+0

Может ли кто-нибудь помочь мне с этим? –

ответ

0

Благодарим Вас за входы Каждый

Я нашел решение проблемы я использовал реентрантные замки, чтобы решить проблему. сделал статический объект Lock в глобальном файле и сделал lock.tryLock() в обоих файлах для решения проблемы

0

Вы можете заказать обновления и вставки с PriorityBlockingQueue для обработки пластин с приоритетом.

+0

Очереди приоритетов Arent для отправки данных. никогда не использовал один. Так что я не уверен, что я не понимаю, что будет поставлено и что будет извлечено. Или я что-то упустил, и они что-то блокируют? –

+0

PriorityBlockingQueue Работает над логикой, которую один поток должен добавить данные (Thread 1), и нужно получить данные (Thread 2), и если очередь заполнена или очередь пуста, поток будет заблокирован. Однако в моем scenerio я хочу, чтобы поток работал, если нет флага (если я принимаю PriorityBlockingQueue, что означает, что очередь пуста запускает поток 2, и если в очереди есть остановка потока данных 2 при работе нити 1) Это просто напротив очереди приоритетов. –