2017-02-01 2 views
0

У меня есть веб-приложение весны загрузки. У меня есть два места, которые не могут работать одновременно. У меня есть два метода: один вызывается службой планировщика весны, а другой вызывается потоком. Я хочу гарантировать, что эти два метода не вызываются одновременно.Как создать приложение широкого семафора

Я посмотрел на семафоры Java, но я не думаю, что они глобальны. Если бы я мог создать семафор, который является одноэлементным или глобальным семафором, это было бы здорово. Возможно ли это сделать?

+0

Не можете ли вы создать «Семафор» в конфигурации java, укажите ему имя компонента «@Bean (name =« semaphoreName »)» и используйте это имя компонента при введении семафора '@Autowire (name =" semaphoreName ")'? –

+0

Или в этом случае может оказаться лучше ReentrantLock. https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html – Redlab

+0

@ RenéLink благодарит, что это сработало. – Luke101

ответ

1

Простое решение заключается в следующем: поместите эти 2 метода (или промежуточные методы, которые вызывают исходные методы) в том же классе, объявите эти методы синхронизированными и объявите одноэлементный компонент этого класса.