完整版 笔记汇总 自己用AQS实现一个简单的线程协作器
Posted cowcow2100
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完整版 笔记汇总 自己用AQS实现一个简单的线程协作器相关的知识,希望对你有一定的参考价值。
对Java并发常见的工具类进行从使用到原理的详解,
包括CAS+AQS+ThreadLocal+ConcurrentHashMap+线程池+各种锁+并发综合实战项目
下载:Downlod
提取码:9voy
package aqs;
import java.util.concurrent.locks.AbstractQueuedSynchronizer;
/**
* 描述: 自己用AQS实现一个简单的线程协作器
*/
public class OneShotLatch
private final Sync sync = new Sync();
public void signal()
sync.releaseShared(0);
public void await()
sync.acquireShared(0);
private class Sync extends AbstractQueuedSynchronizer
protected int tryAcquireShared(int arg)
return (getState() == 1) ? 1 : -1;
protected boolean tryReleaseShared(int arg)
setState(1);
return true;
public static void main(String[] args) throws InterruptedException
OneShotLatch oneShotLatch = new OneShotLatch();
for (int i = 0; i < 10; i++)
new Thread(new Runnable()
public void run()
System.out.println(Thread.currentThread().getName()+"尝试获取latch,获取失败那就等待");
oneShotLatch.await();
System.out.println("开闸放行"+Thread.currentThread().getName()+"继续运行");
).start();
Thread.sleep(5000);
oneShotLatch.signal();
new Thread(new Runnable()
public void run()
System.out.println(Thread.currentThread().getName()+"尝试获取latch,获取失败那就等待");
oneShotLatch.await();
System.out.println("开闸放行"+Thread.currentThread().getName()+"继续运行");
).start();
以上是关于完整版 笔记汇总 自己用AQS实现一个简单的线程协作器的主要内容,如果未能解决你的问题,请参考以下文章
Java多线程之---用 CountDownLatch 说明 AQS 的实现原理