Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Transaction {
- private static final ConcurrentHashMap<String, Transaction> map = new ConcurrentHashMap<>();
- private final String id;
- private final Lock lock;
- private final Condition condition;
- private Orders.Order order;
- private Transaction(String id) {
- this.id = id;
- this.lock = new ReentrantLock();
- this.condition = lock.newCondition();
- }
- public static Transaction from(String id) {
- return map.computeIfAbsent(id, Transaction::new);
- }
- public static void signalAll(String id, Orders.Order order) {
- Transaction transaction = map.remove(id);
- if (transaction != null) {
- transaction.lock.lock();
- transaction.order = order;
- transaction.condition.signalAll();
- transaction.lock.unlock();
- }
- }
- public Orders.Order await() {
- this.lock.lock();
- try {
- this.condition.await(60, TimeUnit.SECONDS);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return order;
- }
- public String getId() {
- return id;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement