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");
        }
    }
    
  • 相关阅读:
    AOP
    关于zookeeper部署的个数
    Zookeeper 简介
    Java 正则表达式
    面试记录
    面试题
    Spring Framework官方文档翻译(中英文版)
    java知识巩固
    mysql sql记录
    redis入门
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10192573.html
Copyright © 2011-2022 走看看