返回顶部
首页 > 资讯 > 精选 >java的Balking模式怎么实现
  • 867
分享到

java的Balking模式怎么实现

2023-06-29 00:06:25 867人浏览 薄情痞子
摘要

本文小编为大家详细介绍“java的Balking模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“java的Balking模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Balk有拒绝,阻碍的

本文小编为大家详细介绍“java的Balking模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“java的Balking模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Balk有拒绝,阻碍的意思。如果现在不适合执行这个操作,或者没必要执行这个操作,就停止处理,直接返回。这就是Balking模式。

Balking 模式可以和Guarded Suspension 模式对比,都存在守护条件。而在Balking模式中,如果守护条件不成立就立即中断处理,而Guarded Suspension 模式则是一直等待至可以运行。

创建4个类

名字说明
Data表示可以修改并保存的数据的类
SaverThread定期保存数据内容的类
ChangerThread修改并保存数据内容的类
Main测试
 import java.io.FileWriter;import java.io.IOException;import java.io.Writer; public class Data {     private final  String fileName;    private String content;    private boolean changed;     public Data(String fileName, String content) {        this.fileName = fileName;        this.content = content;    }     // 修改数据内容    public synchronized void change(String newContent){        content = newContent;        changed = true;    }     // 若数据内容修改过。则保存到文件中    public synchronized void save() throws IOException {        if (!changed){            return;        }        doSave();        changed = false;     }     // 将数据内容实际保存到文件中    private void doSave() throws IOException {        System.out.println(Thread.currentThread().getName() + " calls doSave,content= " + content);        Writer writer = new FileWriter(fileName);        writer.write(content);        writer.close();    }}
import java.io.IOException; public class SaverThread extends  Thread{     private final Data data;     public SaverThread(String fileName ,Data data) {        super(fileName);        this.data = data;    }     @Override    public void run() {        try {            while (true) {                data.save();   // 要求保存数据                Thread.sleep(1000);            }        } catch (IOException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }     }}
import java.util.Random; 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;    }     @Override    public void run() {        try {            for (int i = 0; true; i++) {                data.change("No." + i);   // 修改数据                Thread.sleep(random.nextInt(1000));  // 执行其他操作 ,只是随机暂停一段时间                data.save();   // 显式的保存            }        } catch (Exception e) {            e.printStackTrace();        }    }}

这里注意Data类的doSava方法每次都是重新创建文件,文件内容会全部消失,该示例不能直接用作应用程序的自动保存功能,如果想做,必须对文件进行备份。

 public class Main {    public static void main(String[] args) {        Data data =  new Data("data.txt","(empty)");        new ChangerThread("ChangerThread",data).start();        new SaverThread("SaverThread",data).start();    }}

运行结果:没有出现重复的编号。

Balking 模式中的登场角色

GuardedObject (被保护的对象)

GuardedObject 角色是一个拥有被防护的方法(guardedMethod)的类。当线程执行guardedMethod方法时,若守护条件成立,则执行实际的处理。反之,直接返回。守护条件的成立与否会随着GuardedObject 角色的状态变化而改变。

除了guardedMethod方法外,GuardedObject应该有改变状态的方法(StateChangingMethod)。在上面示例中,由Data扮演此角色,sava方法则是guardedMethod,change方法则是StateChangingMethod。守护条件对应的是change属性为true;

使用场景:

1 并不需要执行时

比如写文件时,如果文件内容没有变化,则无需再写,提高程序性能。

2  不需要等待守护条件成立时

Balking模式的特点就是不进行等待,一旦守护条件不成立时,可以立即返回并进入下一个操作。这能够大大提高程序的相应性。

3 守护条件仅在第一次成立时

例如我们先看看下面的代码

 public class Something {    private boolean initialized =false;    public synchronized void init(){        if (initialized){            return;        }        doInit();        initialized = true;    }        private void doInit(){        // 处理逻辑    }}

initialized 表示初始化是否完成,而这里一旦初始化完成,initialized 就为true,而且状态就永远不会发生变化了。所以守护条件不成立时,直接返回。像这种initialized 字段,状态仅变化一次的变量,我们通常称为闭。一旦把门锁上了,就再也打不开了。

balk结果的表示方式:当从guardedMethod方法中balk并返回时,有如下表示方式

忽略balk通过返回值来表示balk,如true,false可以通过 异常的方式来表示

读到这里,这篇“java的Balking模式怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: java的Balking模式怎么实现

本文链接: https://lsjlt.com/news/321378.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java的Balking模式怎么实现
    本文小编为大家详细介绍“java的Balking模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“java的Balking模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Balk有拒绝,阻碍的...
    99+
    2023-06-29
  • 深入浅析Java中的Balking模式
    深入浅析Java中的Balking模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。当现在不适合这个操作,或是没有必要进行这个操作时就直接放弃这个操作而回去。这个就是Balki...
    99+
    2023-05-31
    java balking ava
  • Java多线程中的Balking模式详解
    目录1.场景2.详细说明3.Balking模式的本质:停止并返回源代码如下:总结1.场景 自动保存功能: 为防止电脑死机,而定期将数据内容保存到文件中的功能。 2.详细说明 当数据内...
    99+
    2024-04-02
  • java多线程之Balking模式介绍
    Balk有拒绝,阻碍的意思。如果现在不适合执行这个操作,或者没必要执行这个操作,就停止处理,直接返回。这就是Balking模式。 Balking 模式可以和Guarded Suspe...
    99+
    2024-04-02
  • Java设计模式的工厂模式怎么实现
    本篇内容介绍了“Java设计模式的工厂模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!工厂模式在Java应用程序中对象无处不在,这...
    99+
    2023-06-29
  • Java设计模式的桥接模式怎么实现
    这篇文章主要讲解了“Java设计模式的桥接模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java设计模式的桥接模式怎么实现”吧!什么是桥接模式桥接(Bridge)模式的定义如下:...
    99+
    2023-06-30
  • Java设计模式的代理模式怎么实现
    这篇文章主要介绍了Java设计模式的代理模式怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java设计模式的代理模式怎么实现文章都会有所收获,下面我们一起来看看吧。什么是代理模式代理模式的定义: 由于某...
    99+
    2023-06-30
  • java的单例模式怎么实现
    今天小编给大家分享一下java的单例模式怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • Java的组合模式怎么实现
    本篇内容介绍了“Java的组合模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、什么是组合模式Compose objects i...
    99+
    2023-07-05
  • java的工厂模式怎么实现
    在Java中,工厂模式可以通过两种方式来实现:简单工厂模式和抽象工厂模式。 简单工厂模式: 简单工厂模式的核心是定义一个工厂类,该类...
    99+
    2024-02-29
    java
  • java设计模式中的门面模式怎么实现
    这篇文章主要介绍“java设计模式中的门面模式怎么实现”,在日常操作中,相信很多人在java设计模式中的门面模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java设计模式中的门面模式怎么实现”的疑...
    99+
    2023-06-29
  • Java设计模式的适配器模式怎么实现
    这篇文章主要介绍“Java设计模式的适配器模式怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java设计模式的适配器模式怎么实现”文章能帮助大家解决问题。什么是适配器模式适配器模式(Adap...
    99+
    2023-06-30
  • Java设计模式的装饰器模式怎么实现
    本文小编为大家详细介绍“Java设计模式的装饰器模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java设计模式的装饰器模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是装饰器模式装饰器...
    99+
    2023-06-30
  • Java设计模式中的命令模式怎么实现
    本文小编为大家详细介绍“Java设计模式中的命令模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java设计模式中的命令模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。个人理解:把一个类里的...
    99+
    2023-06-30
  • java门面模式怎么实现
    这篇文章主要介绍“java门面模式怎么实现”,在日常操作中,相信很多人在java门面模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java门面模式怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-19
  • Java怎么实现桥接模式
    本文小编为大家详细介绍“Java怎么实现桥接模式”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么实现桥接模式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。桥接模式(Bridge Pattern)是用于...
    99+
    2023-06-27
  • java原型模式怎么实现
    这篇文章主要介绍“java原型模式怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java原型模式怎么实现”文章能帮助大家解决问题。原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创...
    99+
    2023-06-28
  • java克隆模式怎么实现
    在Java中,克隆模式可以通过实现Cloneable接口和重写Object类的clone()方法来实现。下面是一个简单的例子:首先,...
    99+
    2023-08-30
    java
  • java享元模式怎么实现
    在Java中,享元模式可以通过以下步骤来实现: 定义共享对象的接口(享元接口):这个接口定义了共享对象的操作方法。 public...
    99+
    2023-10-23
    java
  • Java代理模式怎么实现
    这篇文章主要讲解了“Java代理模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java代理模式怎么实现”吧!结构型模式前面创建型模式介绍了创建对象的一些设计模式,这节介绍的结构型...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作