# ConcurrentJava **Repository Path**: pythoncat1024/ConcurrentJava ## Basic Information - **Project Name**: ConcurrentJava - **Description**: 《Java并发编程的艺术》笔记 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: concurrent - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-12-12 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### join 1. Thread#join(); --> 实际上调用的是 wait(); 2. 在当前线程调用 subThread.join(); , 当前线程就会在 join() 返回之后,才继续执行。 > 而 join() 的本质是 wait(), 所以,当调用 th.join(); 就表示当前线程会等待 th 执行完成后,再继续执行自己后续的逻辑。 ### CountDownLatch 1. 构造函数指定 count; 2. .await(); 会让当前线程阻塞,直到 count==0; 3. .countDown(); 会让 count--; > 主要用途是进行线程的等待。比如在主线程调用 .await(); 会导致主线程立即阻塞, > 然后等子线程全部跑完,每次跑完一个子线程就调用一次 .countDown(); > 这样就能保证主线程在全部子线程结束之后才进行下一步逻辑。 ### wait, notify, interrupt 1. wait,notify,notifyAll 全部需要在锁里面执行。比如 synchronized, lock.lock(); 等。 2. 当调用 obj.wait(); 会导致该线程被阻塞; 3. 此时在其他线程调用该obj 的 obj.notify/obj.notifyAll 之后,可以让之前的线程从 wait() 方法返回,执行后续的逻辑。 C. 类似与3, waitedThread.interrupt(); 可以打断等待,让其等待状态被中断,并进入 catch(InterruptedException ie){} 代码块里面。