0
点赞
收藏
分享

微信扫一扫

玩转Java并发工具精通JUC成为并发多面手【15章完整版】 笔记汇总 自己用AQS实现一个简单的线程协作器

老榆 2022-02-08 阅读 86

对Java并发常见的工具类进行从使用到原理的详解,

包括CAS+AQS+ThreadLocal+ConcurrentHashMap+线程池+各种锁+并发综合实战项目


下载:​​Downlod​​ 

提取码:9voy 

失效+​​\/❤:cowcow2100​


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章完整版】 笔记汇总 自己用AQS实现一个简单的线程协作器_i++

玩转Java并发工具精通JUC成为并发多面手【15章完整版】 笔记汇总 自己用AQS实现一个简单的线程协作器_ide_02

举报

相关推荐

0 条评论