'Waiting for something to finsih, should I use thread.sleep or ReentrantLock?

I have a Java program. The logic is as follow:

  1. place order out (relying on Interactive Broker / Binance API)
  2. Once the order is filled (there will be a callback from the API), immediately execute a method called "calculateSomething"

The order is placed using Interactive Broker / Binance API. Once the order is filled, the API callback method will return a message.

The problem is that I do not know how to write out the code to identify that the order has been filled, so i can immediately execute the "calculateSomething" method with minimal waiting time.

I can think of two ways:

  1. while loop and thread.sleep
  2. ReentrantLock.

Method 1 works, but it's not instantaneous. Hence, I am exploring ReentrantLock and I am not sure the code is correct. Nonetheless, which method is the most efficient and can immediately execute the "calculateSomething" once the order is completed If there is a more efficient approach, please give me some help, as I have been stuck in this problem for many days.

pseudocode below.

Method 1 - thread.sleep

placeOrder(); // place order to binance <- API method
while(order is not completed){
     Thread.sleep(1000)
     if(order is completed){
          return
     }
}
calculateSomething();

Method 2 - ReentrantLock

ReentrantLock lock = new ReentrantLock();
lock.lock();
System.out.println("1. Locked");
try {
     while(lock.isLocked()) {
          if(isOrderCompleted() == true){
               lock.unlock();
          }
     }
} catch(Exception e){
     e.printStackTrace();
}finally {
     if(lock.isLocked()) {
          lock.unlock();
     }
}
calculateSomething();


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source