zoukankan      html  css  js  c++  java
  • Balking模式

    Balking模式讲的是如果现在不合适执行这个操作,或者没必要执行这个操作,就停止处理,直接返回

    自动保存功能的实现逻辑一般都是隔一定时间自动执行存盘操作,存盘操作的前提是文件做过修改,如果文件没有执行过修改操作,就需要快速放弃存盘操作

    public class Data {
        private final String filename; // 保存的文件名称
        private String content; // 数据内容
        private Boolean changed;// 修改后的文件尚未保存时,为true
    
        public Data(String filename, String content) {
            this.filename = filename;
            this.content = content;
            this.changed = true;
        }
    
        // 修改数据内容
        public synchronized void change(String newContent) {
            content = newContent;
            changed = true; // 为了表示content字段内容与文件内容不一致,未修改状态
        }
    
        // 若数据内容修改过,则保存到文件中
        public synchronized void save() throws IOException {
            if (!changed) {
                return;
            }
            doSave();
            changed = false; // 为了表示content字段内容与文件内容一致,未修改状态
        }
    
        private void doSave() throws IOException {
            System.out.println(Thread.currentThread().getName() + " calls doSave,content=" + content);
            Writer writer = new FileWriter(filename,true);
            writer.write(content);
            writer.close();
        }
    }
    
    public class ChangerThread extends Thread {
        private final Data data;
        private final Random random = new Random();
    
        public ChangerThread(String name, Data data) {
            super(name);
            this.data = data;
        }
    
        public void run() {
            try {
                for (int i = 1; i<=10; i++) {
                    data.change("No." + i); // 修改数据
                    Thread.sleep(random.nextInt(1000)); // 执行其他操作
                    data.save(); // 显示地保存
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }
    
    public class SaverThread extends Thread {
        private final Data data;
    
        public SaverThread(String name, Data data) {
            super(name);
            this.data = data;
        }
    
        public void run() {
            try {
                while (true) {
                    data.save(); // 要求保存数据
                    Thread.sleep(1000); // 休眠约1秒
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Data data = new Data("C:\Users\Administrator\Desktop\abc.txt", "emtity");
            new ChangerThread("ChangerThread", data).start();
            new SaverThread("SaverThread", data).start();
        }
    }

    单次初始化

    class InitTest{
      boolean inited = false;
      synchronized void init(){
        if(inited){
          return;
        }
        // 省略 doInit 的实现
        doInit();
        inited=true;
      }
    }
  • 相关阅读:
    springboot mybatis-plus 多数据源
    怎样建网站?
    哪些软件外包公司为什么不赚钱?
    初高中英语 牛津书虫全套系列 英汉双语读物系列1-6级 音频+文本网盘下载【收藏】
    英语零基础直达六级水平-英语学习全能套装视频完整版【收藏】
    重构:改善既有代码的设计(第2版)(pdf,epub,azw3,mobi)[收藏]
    彻底关闭浏览器的弹出广告或通知(Chrome+Firefox )
    《读者》杂志38年合集 (1981-2018)电子版【收藏】
    怎样在知乎赚钱?(知乎好物)
    《故事会》(2010-2019)全年合集pdf版 [收藏]
  • 原文地址:https://www.cnblogs.com/moris5013/p/11779961.html
Copyright © 2011-2022 走看看