Balking Patten ------Java 多线程模式(四)
Balking Patten
------ 不需要的话,就算了
我现在正在餐厅吃饭,考虑要吃什么东西。
因为我已经决定要吃什么了,所以我举手表示我想要点餐。注意到我举起手的服务生,就向我走来。
这时,有另一位服务员也注意到我了。不过,他看到已经有一个人靠近我的座位,所以就不过来了……
这就是Balking Patten。
下面是在一个关于监视文件是否被修改的线程的一部分代码,警戒条件是文件是否被修改,如果被修改了就保存,如果发现文件没有被修改,就没有必要保存了,其中changed就是标志文件是否被修改的标志量。
public synchronized void save() throws IOException{
if(!changed){
return ;//若发现没有被修改,直接返回。
}
doSave();
changed = false ;
}
具体怎么用,我想大家都应该很清楚了,现在我们讲讲何时可以用到这个。
1.不要刻意去执行的时候:
就像上面提到的那种情况,我发现自己可以不执行,所以就直接返回,这样就提高了程序的性能。
2.不想等到境界条件成立时:
我们可以看到,上面的程序在判断警戒条件不成立时就立即退出了,马上进入下一步工作,这样在一定程度上提高了程序的响应性。
3.警戒条件只有第一次成立时:
就是在我们的程序中,警戒条件成立的机会只有一次,以后就不会再成立了,比如说我们初始化,我们可以采用这种模式来判断属性是否被初始化了,若已经被初始化了就没有必要再初始化了。
我们还谈谈怎么表示balk结果:
1.忽略balk的发生
2.以函数返回值的方式表示balk的发生
3.以异常的方式表示balk的发生
Balking Patten ------Java 多线程模式(四)相关推荐
- Java多线程模式-Balking模式
1.场景 自动保存功能: 为防止电脑死机,而定期将数据内容保存到文件中的功能. 2.详细说明 当数据内容被修改时,内容才会被保存.即当写入的内容与上次写入的内容一致时,其实就没有必要执行写入操作.也就 ...
- java多线程系列(四)---ReentrantLock的使用
Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理 ...
- Java多线程模式(一)
Java多线程基础 Thread类的run方法和start方法 Java语言写成的程序一定是先从主线程开始操作,所以必须在程序的某个位置启动新的线程,才能算是真正的多线程程序.start ...
- Java:简述Java多线程的四种实现方式
关联文章:<Java:简述Java中的多线程编程> Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来 ...
- Java多线程系列(四):4种常用Java线程锁的特点,性能比较、使用场景
多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...
- 【Java并发编程】Java多线程(四):FutureTask 源码分析
前言:[Java并发编程]Java多线程(三):Runnable.Callable --创建任务的方式 在上一篇文章的末尾我们通过两个问题,引出了 FutureTask 及其设计思路,先来回顾一下: ...
- Java多线程(四)线程并发的理解
前言 并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行. ----以上摘自百度百科 一.龟 ...
- Java多线程学习四十三:
本课时我们主要讲解 final 的三种用法. final 的作用 final 是 Java 中的一个关键字,简而言之,final 的作用意味着"这是无法改变的".不过由于 fina ...
- Java多线程学习四:共有哪 3 类线程安全问题
我们在实际开发中经常会遇到线程不安全的情况,那么一共有哪 3 种典型的线程安全问题呢? 运行结果错误: 发布和初始化导致线程安全问题: 活跃性问题. 运行结果错误 来看多线程同时操作一个变量导致的运行 ...
最新文章
- 在html前面追加,在追加到DOM之前操纵html
- pandas.DataFrame.iloc的使用
- go中有缓存通道和无缓存通道区别
- 如何用 JavaScript+Canvas 开发一款超级烧脑小游戏?
- html表单输入价格,在HTML中使用表格来计算总价格
- python自学-分享一位小伙伴的python自学之路,走了哪些弯路?
- 敢问多任务学习优化算法路在何方?|附代码
- 计算机二级excel试题练习网盘,计算机二级练习试题excel
- 计算机三级数据库考试题型,计算机三级数据库技术考试习题及答案
- 新版眼保健操图解(转)
- 高斯定理在神经网络上的投影
- 输入汉语星期几输出英文c语言程序,c输入1234567,输出英语星期日期
- SQL-spj库创建脚本
- 安卓ios和java如何选_在android和iOS之间选择novi编程
- findContours函数报错:“将一个无效参数传递给了将无效参数视为严重错误的函数”解决方案
- 2022年,计算机er保研选计科还是电信?
- TP5 封装 mongoDB
- 页面布局的方式有哪些?
- DNS服务器未响应是什么意思
- 西北地区博友链接集合(陆续增加中)
热门文章
- 【Docker 完整版教程笔记】
- 28种运动健身摄影调色lr预设
- 【editplus经常用的快捷键】Editplus 选中一行ctrl+r,Edit 合并行 Ctrl+Shift+J 合并选定行 删除当前行
- 爸爸去哪儿游戏安卓版下载
- html5音频剪辑,一种基于HTML5Canvas画布音视频分段剪辑方法与流程
- 录屏软件:Camtasia Studio 8汉化教程
- 85141-94-2,Br-PEG4-OH,Bromo-PEG4-alcohol,溴代-四聚乙二醇含有溴基和末端羟基的PEG连接剂
- width和min-width的区别和差异性比较
- python-nodejs基于安卓Android/微信小程序的自来水收费系统APP
- el-tabs标签的宽度自撑开