zoukankan      html  css  js  c++  java
  • 阻行模式【其他模式】

    阻行设计模式

    public class Balking {
        /**
         *  balking design pattern【阻行设计模式】:
         *  当目标对象不在特定状态时,执行阻行方法时,该方法会立即返回不执行任何操作。
         */
        @Test
        public void all() throws InterruptedException {
            final int count = 3;
            final Machine machine = new Machine();
            for (int i = 0; i < count; i++) {
                CompletableFuture.runAsync(() -> {
                    try {
                        machine.tryRun();
                    } catch (final InterruptedException e) {
                    }
                });
            }
            TimeUnit.SECONDS.sleep(5);
        }
    }
    
    enum MachineState {
        IDLE, WORKING
    }
    
    @Slf4j
    class Machine {
        private MachineState state = MachineState.IDLE;
    
        public void tryRun() throws InterruptedException {
            synchronized (this) {
                if (MachineState.WORKING.equals(state)) {
                    log.error("machine is working now");
                    return;
                }
                state = MachineState.WORKING;
            }
            log.info("machine is working for {}", Thread.currentThread().getName());
            TimeUnit.SECONDS.sleep(2);
            finish();
        }
    
        private synchronized void finish() {
            state = MachineState.IDLE;
            log.info("machine is idle now");
        }
    }
    
  • 相关阅读:
    OpenCV——IplImage
    OpenCV——常用函数查询
    OpenCV——Sobel和拉普拉斯变换
    OpenCV——CvSeq动态结构序列
    OpenCV——人脸检测
    Java—Integer类
    Java—NumberFormat与DecimalFormat类
    sql事务机制
    存储过程
    java中的抽象类和接口
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10192573.html
Copyright © 2011-2022 走看看