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 条评论) |