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只是一個框架,至于怎么玩,就是你的事了!
感謝您的大駕光臨!咨詢技術、產品、運營和管理相關問題 , 請關注后留言 。歡迎騷擾,不勝榮幸~

推薦閱讀