1.join:
线程A 调用了 线程B 的 join() 方法 ,线程A 必须等待线程B 执行完后 才能执行;
2.yield()、sleep()、wait()、notify()释放锁问题
调用yield()、sleep() 线程 持有的锁 不释放;
wait()调用方法前 必须持有锁,调用之后释放锁,wait()返回后持有锁;
notify()调用方法前 必须要只有锁,调用之后 的代码走完 ,释放锁
3.fork join 分而治之
有返回 extend RecursiveTask
没有返回 extend RecursiveAction
异步 pool.execute(task)
同步 pool.invoke(task)
4.CountDownLatch
作用:是一个线程等待其他线程完成工作以后再执行,加强版 join
countdownlatch计数器 其他线程需要等待的 await(), 减到 0 await 后面的开始执行
5.CycliBarrier
让一组线程达到某一个屏障,一直到组内最后一个线程达到屏障时,所有被阻塞的线程会继续运行
6.Semaphore
控制同时访问某个特定资源的数量。
同步关键类,构造方法传入的数字是多少,则同一个时刻,只运行多少个进程同时运行制定代码
7.Exchager
线程间的数据交换,限制两个线程之间交换
8.Locksport
9.AQS
独享锁获取锁:
tryAcquire 需要覆盖
acquire(int arg)
acquireInterruptibly(int arg)
tryAcquireNanos(int arg, long nanosTimeout)
独享释放锁:
release
tryRelease 需要覆盖
共享锁获取锁:
acquireShared
acquireSharedInterruptibly
tryAcquireSharedNanos
tryAcquireShared 需要覆盖
共享释放锁:
releaseShared
tryReleaseShared 需要覆盖
是否处于独占模式:isHeldExclusively()