完整版 笔记汇总 自己用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

@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();

玩转Java并发工具精通JUC成为并发多面手【15章完整版】

玩转Java并发工具精通JUC成为并发多面手【15章完整版】

以上是关于完整版 笔记汇总 自己用AQS实现一个简单的线程协作器的主要内容,如果未能解决你的问题,请参考以下文章

AQS原理分析

Java多线程之---用 CountDownLatch 说明 AQS 的实现原理

AQS简单介绍

中国移动短信网关错误代码汇总(完整版)

AbstractQueuedSynchronized(AQS)学习笔记

AQS系列- CountDownLatch的使用及原理