完整版 笔记汇总 自己用AQS实现一个简单的线程协作器

宁可枝头抱香死,何曾吹落北风中。这篇文章主要讲述完整版 笔记汇总 自己用AQS实现一个简单的线程协作器相关的知识,希望能为你提供帮助。
对java并发常见的工具类进行从使用到原理的详解,
【完整版 笔记汇总 自己用AQS实现一个简单的线程协作器】包括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

@Override
protected int tryAcquireShared(int arg)
return (getState() == 1) ? 1 : -1;


@Override
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()
@Override
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()
@Override
public void run()
System.out.println(Thread.currentThread().getName()+"尝试获取latch,获取失败那就等待");
oneShotLatch.await();
System.out.println("开闸放行"+Thread.currentThread().getName()+"继续运行");

).start();





    推荐阅读