countdownlatch 导致的多线程死锁

countdownlatch是通过计数器实现的,初始化时定义count数,每一个线程执行完将count数-1.当count=0时表示所以线程执行完毕,可以进入接下来的逻辑。

countdownlatch的await()方法是等待count=0,执行此方法时,执行完的线程会进入阻塞,并等待其他线程完成,当所有线程完成时,await会唤醒阻塞队列并释放所有线程资源。

当高并发请求时,countdownlatch的await方法有可能会引起死锁。如果使用的线程池数量较少,在高并发时会出现多个请求占用了全部的线程资源,但是每个请求又需要await其他线程,其他线程在等待线程池资源,导致多个请求同时进入线程阻塞,最后形成死锁。

解决方法,使用自定义线程池,扩大线程数量,并且建立线程池拒绝机制。

你可能感兴趣的:(countdownlatch 导致的多线程死锁)