首页 > 作文

java多线程之Balking模式介绍

更新时间:2023-04-04 18:18:19 阅读: 评论:0

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

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

创建4个类

名字说明data表示可以修改并保存的数据的类saver什么叫双一流thread定期保存数据内容的类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;    }     // 修改数据内容    publi收入证明模板c synchronized void change(string newcon有一种声音在记忆深处tent){        content = newcontent;        changed = true;    }     // 若数据内容修改过。则保存到文件中    public synchronized void save() throws ioexception {        if (!changed){            return;        }        dosave();        changed = fal;     }     // 将数据内容实际保存到文件中    private void dosave() throws ioexception {        system.out.println(thread.currentthread().getname() + " calls dosave,content= " + content);        writer writer = new filewriter(filename);        writer.write(content);        writer.clo();    }}
import java.io.ioexception; public class saverthread extends  thread{     private final data data;     public saverthread(string filename ,data data) {        super(filename);        this.d妇女产假ata = 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 s长沙培训学校tatic 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 =fal;    public synchronized void init(){        if (initialized){            return;        }        doinit();        initialized = true;    }        private void doinit(){        // 处理逻辑    }}

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

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

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

总结

到此这篇关于java多线程之balking模式介绍的文章就介绍到这了,更多相关java多线程balking模式内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 18:18:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/6afb65528a4cb545d6804f1f31189272.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:java多线程之Balking模式介绍.doc

本文 PDF 下载地址:java多线程之Balking模式介绍.pdf

下一篇:返回列表
标签:条件   模式   方法   内容
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图