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 多线程模式(四)相关推荐

  1. Java多线程模式-Balking模式

    1.场景 自动保存功能: 为防止电脑死机,而定期将数据内容保存到文件中的功能. 2.详细说明 当数据内容被修改时,内容才会被保存.即当写入的内容与上次写入的内容一致时,其实就没有必要执行写入操作.也就 ...

  2. java多线程系列(四)---ReentrantLock的使用

    Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理 ...

  3. Java多线程模式(一)

    Java多线程基础 Thread类的run方法和start方法        Java语言写成的程序一定是先从主线程开始操作,所以必须在程序的某个位置启动新的线程,才能算是真正的多线程程序.start ...

  4. Java:简述Java多线程的四种实现方式

    关联文章:<Java:简述Java中的多线程编程> Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来 ...

  5. Java多线程系列(四):4种常用Java线程锁的特点,性能比较、使用场景

    多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...

  6. 【Java并发编程】Java多线程(四):FutureTask 源码分析

    前言:[Java并发编程]Java多线程(三):Runnable.Callable --创建任务的方式 在上一篇文章的末尾我们通过两个问题,引出了 FutureTask 及其设计思路,先来回顾一下: ...

  7. Java多线程(四)线程并发的理解

    前言 并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行. ----以上摘自百度百科 一.龟 ...

  8. Java多线程学习四十三:

    本课时我们主要讲解 final 的三种用法. final 的作用 final 是 Java 中的一个关键字,简而言之,final 的作用意味着"这是无法改变的".不过由于 fina ...

  9. Java多线程学习四:共有哪 3 类线程安全问题

    我们在实际开发中经常会遇到线程不安全的情况,那么一共有哪 3 种典型的线程安全问题呢? 运行结果错误: 发布和初始化导致线程安全问题: 活跃性问题. 运行结果错误 来看多线程同时操作一个变量导致的运行 ...

最新文章

  1. 在html前面追加,在追加到DOM之前操纵html
  2. pandas.DataFrame.iloc的使用
  3. go中有缓存通道和无缓存通道区别
  4. 如何用 JavaScript+Canvas 开发一款超级烧脑小游戏?
  5. html表单输入价格,在HTML中使用表格来计算总价格
  6. python自学-分享一位小伙伴的python自学之路,走了哪些弯路?
  7. 敢问多任务学习优化算法路在何方?|附代码
  8. 计算机二级excel试题练习网盘,计算机二级练习试题excel
  9. 计算机三级数据库考试题型,计算机三级数据库技术考试习题及答案
  10. 新版眼保健操图解(转)
  11. 高斯定理在神经网络上的投影
  12. 输入汉语星期几输出英文c语言程序,c输入1234567,输出英语星期日期
  13. SQL-spj库创建脚本
  14. 安卓ios和java如何选_在android和iOS之间选择novi编程
  15. findContours函数报错:“将一个无效参数传递给了将无效参数视为严重错误的函数”解决方案
  16. 2022年,计算机er保研选计科还是电信?
  17. TP5 封装 mongoDB
  18. 页面布局的方式有哪些?
  19. DNS服务器未响应是什么意思
  20. 西北地区博友链接集合(陆续增加中)

热门文章

  1. 【Docker 完整版教程笔记】
  2. 28种运动健身摄影调色lr预设
  3. 【editplus经常用的快捷键】Editplus 选中一行ctrl+r,Edit 合并行 Ctrl+Shift+J 合并选定行 删除当前行
  4. 爸爸去哪儿游戏安卓版下载
  5. html5音频剪辑,一种基于HTML5Canvas画布音视频分段剪辑方法与流程
  6. 录屏软件:Camtasia Studio 8汉化教程
  7. 85141-94-2,Br-PEG4-OH,Bromo-PEG4-alcohol,溴代-四聚乙二醇含有溴基和末端羟基的PEG连接剂
  8. width和min-width的区别和差异性比较
  9. python-nodejs基于安卓Android/微信小程序的自来水收费系统APP
  10. el-tabs标签的宽度自撑开