- 浏览: 1336720 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
Two-phase Termination直译的话是“两相终止”,不过就这个模式而言,该译作“两阶段终止”比较适当,想像您有一个执行绪正在周期性的运作,在“运作阶段”您送出了停止执行绪的请求,这时候执行绪不该慌张的马上终止目前的工作,而是先完成这一次周期的工作,然后进入“善后阶段”完成一些善后的工作,例如关闭档案或网路串流,所谓的两阶段终止,即中止“运作阶段”,并完成“善后阶段”,完整的完成执行绪的工作。
以Java的Thread终止而言,不建议您直接使用stop()方法来终止执行绪,stop()方法会丢出ThreadDeath例外强迫执行绪终止,即使执行绪正在运作阶段或执行至synchronized区,如果您要终止执行绪,建议自行实作,例如:
private boolean isTerminated = false;
public void terminate() {
isTerminated = true;
}
public void run() {
while(!isTerminated) {
// ... some statements
}
}
}
考虑到有时执行绪可能会执行至sleep()或wait()而进入Not Runnable状态,使用上面的方法可能会延迟终止的请求,因而可以在要求终止时再呼叫interrupt()方法,这会丢出 InterruptedException,而使得执行绪从Not Runnable状态中离开,因此可以改变一下程式:
private boolean isTerminated = false;
public void terminate() {
isTerminated = true;
interrupt();
}
public void run() {
try {
while(!isTerminated) {
// ... some statements
}
}
catch(InterruptedException e) {
}
}
}
在发出中止请求之后,如果执行绪是在Not Runnable状态,会丢出InterruptedException,如果这个例外没有先被捕捉,就会被run()中的catch InterruptedException捕捉,也就是说会直接离开while回圈,因而如果您在发出终止请求后,要求先执行完这一个周期的工作,您要先捕捉这个例外,若不用完成这一个周期的工作,则不用捕捉这个例外,要如何作取决于您的程式。
如果执行绪要完成这一个周期的工作,在下一个周期开始之前检查旗标,这时它的结果是false,所以离开while回圈,这时候您可以进行一些善后工作,这个可以写在finally区块中,例如:
private boolean isContinue = false;
public void terminate() {
isTerminated = true;
interrupt();
}
private void doWorkBeforeShutdown() {
// .... do some work before shutdown
}
public void run() {
try {
while(!_isTerminated) {
// ... some statements
}
}
catch(InterruptedException e) {
}
finally {
doWorkBeforeShutdown();
}
}
}
上面这个程式大致上就是Two-phase Termination模式的架构,另外如果您的执行绪还服务着其它的物件,则在送出终止请求到完全终止之前,应该停止服务其它物件,您可以让其它物件要求服务之前,先查询执行绪是否已被要求终止,这可以藉由提供一个方法来达到:
private boolean isTerminated = false;
public void terminate() {
isTerminated = true;
interrupt();
}
public boolean isTerminated() {
return _isTerminated;
}
private void doWorkBeforeShutdown() {
// .... do some work before shutdown
}
public void run() {
try {
while(!_isTerminated) {
// ... some statements
}
}
catch(InterruptedException e) {
}
finally {
doWorkBeforeShutdown();
}
}
}
发表评论
-
J2ME 的优化措施
2012-07-11 02:15 1178常见的性能瓶颈:1.文件的读写和网络的操作2.CPU3.内存4 ... -
JAVA缓存 - Cache类
2011-09-28 11:04 4619JAVA缓存有两种: 一、文件缓存,是指把数据存储在磁盘上 ... -
Java注释(Annotation)详解
2011-03-31 18:22 2404注释:在一个类中可以有多个,类似于一个类可以有多个实例; ... -
Java去除字符串中的空格、回车、换行符、制表符
2011-02-15 11:06 3559本方法采用的是java的正则表达式 import jav ... -
线程池编程
2011-01-23 21:02 1107线程池编程 -
设计模式:Java语言中的应用
2011-01-23 20:59 1325设计模式:Java语言中的应用 -
java用了中间缓存变量
2011-01-23 18:37 2405Java语法、语言特性与机制 2011-01-22 19:1 ... -
Java集合总结
2011-01-19 11:16 3825Set:不区分元素的顺序,不允许出现重复的值list:区分元素 ... -
java.util.current的主要方法简介
2011-01-08 22:18 3438JDK5中增加了Doug Lea的并发库,这一引进给java线 ... -
线程池
2011-01-08 21:03 2074对每个客户都分配一个新的工作线程。当工作线程与客户通信结束,这 ... -
SimpleDateFormat
2010-12-10 16:11 1366With SimpleDateFo ... -
使用 XStream 在 JavaBean 与 XML/JSON 之间相互转换
2010-12-10 14:24 1565XML 和 JSON 是当今常用的两种数据描述与传输的格式,特 ... -
Linux上JDK的 安装和卸载 详细 (转)
2010-11-27 15:48 1929安装 1. 去http://java.sun.com ... -
java 路径问题
2010-11-26 16:21 13051.JSP/Servlet中获得当前应用的相对路径和绝对路径 ... -
对synchronized(this)的一些理解
2010-11-25 23:41 1029一、当两个并发线程访问同一个对象object中的这个synch ... -
Externalizable
2010-11-20 22:41 1366被Serializable接口声明的类的对象的内容都将被序列化 ... -
Java实现文件拷贝的4种方法(转)
2010-11-15 12:33 1253... -
Java内省和反射机制三步曲之 - 内省
2010-11-11 12:15 1347经过多方面的资料搜集整理,写下了这篇文章,本文主要讲解java ... -
java内省机制
2010-11-11 11:10 2401反射 (Reflection):反射就是让你可以通 ... -
Design Pattern: Thread-Specific Storage 模式
2010-11-11 00:00 1217无论如何,要编写一个多执行绪安全(thread-safe)的程 ...
相关推荐
两阶段终止模式(Two-Phase Termination Pattern)是一种在多线程编程中确保线程安全关闭的方法,由黄文海在其著作《Java多线程编程实战指南 设计模式》中提出,不属于传统的23种设计模式,而是扩展到36种设计模式之...
- termination:终止 - lessor:出租方 - breach:违反 - conclude:达成 - relevant:相关的 - dissolution:解散 - consultation:咨询 #### U2L1 - 办理手续与费用 - **基础词汇**: - fill sth in:...
ecs-spot-termination配置集 此配置集安装了一个现场终止脚本,该脚本将连续运行并监视现场两分钟警告。 看到两分钟的警告后,它将从ECS群集中耗尽实例。什么是lono配置集? Lono配置集允许通常嵌入在模板中的 可...
- 调整ODT(On-Die Termination,片上终端)电阻,确保数据在传输过程中保持完整。 - 在系统启动、内存速度改变或电压调整后恢复正确的阻抗设置。 2. **ZQ校准的过程**: - 系统初始化:在系统上电或内存初始化...
Two-phase Termination模式: 【前言】 随着现代CPU的生产Craft.io从提升CPU主频频率转向多核化,即在一块芯片上集成多个CPU内核(Core),以往那种靠CPU自身处理能力的提升所带来的软件计算性能提升的那种“免费...
目的 应用程序是一种确保可抢占节点在将要被抢占以便Kubernetes更新其管理时接收信号的方法。 没有节点就迷路了,Kubernetes需要一段时间才能意识到它已经消失并更新了管理。 同时,请求可以继续发送到不再存在的Pod...
通过阅读Micron的“Hardware Tips for Point-to-Point System Design Termination, Layout.pdf”文件,硬件设计者可以深入了解DDR3内存系统的设计要点,从而创建高效、可靠的DDR3内存解决方案。这份文档将帮助他们...
当这个问题扩展到多目标并且包含两个级别的配送中心(一级和二级)时,就形成了多目标二级车辆路径问题(Multi-objective Two-Echelon Vehicle Routing Problem, MTE-VRP)。这种问题通常更复杂,需要考虑更多的因素...
- ec2-instance-termination-protection-disabled: version: latest 或直接将其添加到您的Terraform中: module "ec2-instance-termination-protection-disabled" { source = "git::...
10. 走线模式(Pattern Design):C-PHY走线设计支持多种模式,例如单独的走线模式(2-EAMerged)和合并走线模式(3Merged),这取决于走线的宽度和布局的复杂性。 在进行C-PHY走线布局时,需要综合考虑上述因素。...
AWS节点终止处理程序 ... aws-node-termination-handler(NTH)可以两种不同模式运行:实例元数据服务(IMDS)或队列处理器。 aws-node-termination-handler 监视器将在每个主机上运行一个小型Pod,以执行对IMD
本文主要探讨了一种基于x264实现的快速自适应模式选择方法——Fast Adaptive Early Termination for Mode Selection in H.264/AVC Standard (FAET)。FAET的目标是通过减少计算复杂度来加速模式选择过程,同时保持...
- **动态和名义的On-Die Termination (ODT)**:用于数据、选通和掩码信号的终端电阻控制。 - **可编程CAS读取延迟(CL)**:允许调整读取操作的延迟时间。 - **可编程CAS写入延迟(CWL)**:支持调整写入操作的延迟...
Java多线程模式详解 ...10、Two-Phase Termination ———— 快把玩具收拾好,去睡觉吧 11、Thread-Specific Storage ———— 每个线程的保管箱 12、Active Object ———— 接受异步消息的主动对象
- **Two-phase Termination**(两阶段终止模式):允许一个进程安全地终止,即使它拥有多个子线程。 - **Read-Write Lock**(读写锁模式):允许多个读取线程同时访问资源,但只允许一个写入线程访问资源。 - **...
第10章 Two-Phase Termination——快把玩具收拾好,去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题...
3. **匹配电阻(Termination Resistors)**: - 匹配电阻用于抑制反射,保持信号质量,特别是在高速数据传输中至关重要。 - 设计时需根据eMMC接口标准和信号速率计算并设置合适的匹配电阻值。 4. **读取速度**: ...
$ helm install stable/k8s-spot-termination-handler 可用的Docker图像/标签 标签表示Kubernetes / kubectl版本。 建议对Kubernetes集群和Spot-termination-notice-handler使用相同的版本。 请注意, -1 (或类似...
### Xilinx 7系列FPGA应用指南核心知识点详解 #### 一、概述 Xilinx 7系列FPGA是Xilinx公司推出的新一代可编程逻辑器件,该系列包括Artix-7、Kintex-7以及Virtex-7三个家族,针对不同的应用场景进行了优化设计。...