6 Java多线程:锁与AQS(下)( 三 )

接下来就该测试咱们需要的效果是否能实现了:
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只是一个框架,至于怎么玩,就是你的事了!
感谢您的大驾光临!咨询技术、产品、运营和管理相关问题 , 请关注后留言 。欢迎骚扰,不胜荣幸~

推荐阅读