• 利用AQS实现一个协作类-AQS开门


    利用AQS实现一个协作类-AQS开门的实例代码如下所示:

    package com.yang.aqs;
    
    import java.util.concurrent.locks.AbstractQueuedSynchronizer;
    
    /**
     * 我们模拟一个门,一个线程去开门,剩余的线程去等待开门
     */
    public class MyLatch {
        private final Sync sync = new Sync();
    
        /**
         * 等待开门
         */
        public  void await() {
            sync.tryAcquire(0);
        }
    
        /**
         * 开门 把state设置为1
         */
        public void signal() {
            sync.tryRelease(0);
        }
    
        private class Sync extends AbstractQueuedSynchronizer {
            @Override
            protected int tryAcquireShared(int arg) {
                //如果小于0就要排队
                return (getState() == 1) ? 1 : -1;
    
            }
    
            @Override
            protected boolean tryReleaseShared(int arg) {
                setState(1);
                return true;
            }
    
            @Override
            protected boolean tryAcquire(int arg) {
    
                return (getState() == 1) ? true : false;
            }
    
            @Override
            protected boolean tryRelease(int arg) {
                setState(1);
                return true;
            }
        }
    
        public static void main(String[] args) {
            MyLatch myLatch = new MyLatch();
            for (int i = 0; i < 10; i++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println(Thread.currentThread().getName() + "尝试去打开门,打开失败,需要等待");
                        myLatch.await();
                        System.out.println(Thread.currentThread().getName() + "门开了,可以进去了");
                    }
                }).start();
            }
    
    
        }
    }
    

      

  • 相关阅读:
    Solr Admin管理界面使用说明
    游戏设计手札07
    php中新浪微博的调用
    关于MFC中EDIT编辑框内容换行显示
    几个常用命令
    ANF
    关于MFC中的定时器用法
    C++ 堆方面的笔记
    关于类定义与IO操作
    mysql用户权限配置时遇到的问题
  • 原文地址:https://www.cnblogs.com/cnxieyang/p/12778629.html
Copyright © 2020-2023  润新知