接下来就该测试咱们需要的效果是否能实现了:
public class MyShareLockTester {public static void main(String[] args) throws InterruptedException {// 用自定义AQS共享锁实现// 一次允许发放三把锁MyShareLock.count = 3;final Lock lock = new MyShareLock();// 模拟20个客户端访问for (int i = 0; i < 20; i++) {new Thread(new Runnable() {@Overridepublic void run() {try {lock.lock();System.out.println("持有 " + Thread.currentThread().getName() + " 的客人可以进餐厅就餐");// 每两次叫号之间间隔一段时间,模拟真实场景Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();} finally {// 使用完成释放锁lock.unlock();}}}).start();}}}这里有20个号,每次只能发放3张,运行之后就可以看到确实如此 。
AQS是个很神奇也很好玩的东西,就像它的作者(也是除了高司令就是对Java影响最大的那个人,整个Java的多线程juc包代码就是他编写的)Doug Lea在AbstractQueuedSynchronizer的注释中所说:AQS只是一个框架,至于怎么玩,就是你的事了!
感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言 。欢迎骚扰,不胜荣幸~
【6 Java多线程:锁与AQS(下)】
经验总结扩展阅读
- 三十九 Java开发学习----SpringBoot整合mybatis
- 贝壳的中介费最低可以谈到多少 贝壳中介费是买方付还是卖方付
- 烤箱烤红薯230度多长时间
- JavaSPI详解
- 路由器辐射是手机的多少倍 路由器辐射怎么减少
- 2023年9月22日入职好不好 2023年9月22日适合入职吗
- 甜品有哪些
- 蒸排骨需要蒸多少分钟
- 冰箱里的肉冻多久就不能吃了 肉冻太久有什么危害
- 高压锅煮粥一般要多少分钟?