wangbo commented on issue #11319: URL: https://github.com/apache/doris/issues/11319#issuecomment-1200346027
The JDK8's parallelStream has a global thread pool, we can call this ```thread resource```, all caller could share this thread pool. ```TabletInvertedIndex``` has a lock, we call this ```lock resource```. If we add a lock out of thread pool, then dead lock could happen between ```thread resource``` and ```lock resource``` For example, ``` step 1 Thread 1 get TabletInvertedIndex's read lock. step 2 Other threads calls parallelStream and the thread pool is full. step 3 Thread 1 try to submit task to thread pool, but the it is blocked because the thread pool is full. step 4 Threads in thread pool wants to get TabletInvertedIndex's read lock or write lock, but the lock is held by Thread 1. Finally, deal lock between thread resource and lock resource happens. ``` And there is still a key question is that why readlock could block read lock. We can refer this https://zhuanlan.zhihu.com/p/34672421. In short, even in unfair policy, write locks are not always preempted by read locks -- 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: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org