XiaoyiPeng edited a comment on pull request #3509:
URL: https://github.com/apache/rocketmq/pull/3509#issuecomment-995634452


   Hi, @areyouok  @RongtongJin  @duhenglucky 
   
   I reviewed the given test cases again, the broker will never hangs in your 
test, @areyouok 
   
   In your test case, the reason you made the judgment:  **broker hangs**, is 
due to your console println "begin scan, i still alive", but not println 
"finish scan, i still alive" finally, or vice versa. 
   
   **That's because the IDE console lied to us!**
   **Our naked eyes do not perceive the tiny change in the console !**
   
   You can use `AtomicInteger` to print the times of prints before you print 
"begin scan, i still alive" and "finish scan, i still alive". The code shown 
below: 
   
   ```java
   public class TestLinkedBlockingQueue {
       public static void main(String[] args) throws InterruptedException {
           AtomicInteger startScanTimes = new AtomicInteger();
           AtomicInteger finishScanTimes = new AtomicInteger();
           LinkedBlockingQueue<Object> queue = new LinkedBlockingQueue<>();
           for (int i = 0; i < 10; i++) {
               new Thread(() -> {
                   while (true) {
                       queue.offer(new Object());
                       queue.remove();
                   }
               }).start();
           }
   
           while (true) {
               System.out.println("begin scan, i still alive, times: " + 
startScanTimes.incrementAndGet());
               queue.stream().filter(o -> o != null)
                       .findFirst().isPresent();
               Thread.sleep(1000);
               System.out.println("finish scan, i still alive, times: " + 
finishScanTimes.incrementAndGet());
           }
       }
   }
   ```
   **We can run a fatigue test with this test case, it will never hangs and 
print the given info forever!**
   
   As for the **potential deadlock**, that was my initial misjudgment. In 
methods of class `LinkedBlockingQueue`, `putLock` and `takeLock` are never 
acquired simultaneously in a different order.
   
   Meanwhile, the author of class LinkedBlockingQueue is **Doug Lea**, I don't 
think their test team would be so lax.
   
   best regards!
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to