Java多线程之线程结束清理
该事例说明了清理工作必须要放在finally块中
- package Thread.Interrupting;
- import java.util.concurrent.TimeUnit;
- class NeedsCleanup {
- private final int id;
- public NeedsCleanup(int ident) {
- id = ident;
- System.out.println("NeedsCleanup " + id);
- }
- public void cleanup() {
- System.out.println("Cleaning up " + id);
- }
- }
- class Blocked3 implements Runnable {
- private volatile double d = 0.0;
- @Override
- public void run() {
- try {
- while (!Thread.interrupted()) {
- NeedsCleanup n1 = new NeedsCleanup(1);
- try {
- System.out.println("Sleeping");
- TimeUnit.SECONDS.sleep(1);
- // point2
- NeedsCleanup n2 = new NeedsCleanup(2);
- // Guarantee proper cleanup of n2:
- try {
- System.out.println("Calculating");
- // A time-consuming,non-blocking operation:
- for (int i = 0; i < 2500000; i++) {
- d = d + (Math.PI + Math.E) / d;
- }
- System.out.println("Finished time-consuming operation");
- } finally {
- n2.cleanup();
- }
- } finally {
- n1.cleanup();
- }
- System.out.println("Exiting via while() test");
- }
- } catch (InterruptedException e) {
- System.out.println("Exiting via InterruptedException");
- }
- }
- }
- public class InterruptingIdiom {
- public static void main(String[] args) throws NumberFormatException,
- InterruptedException {
- if (args.length != 1) {
- System.out.println("usage:java InterruptingIdiom delay-in-ms");
- System.exit(1);
- }
- Thread t = new Thread(new Blocked3());
- t.start();
- TimeUnit.MILLISECONDS.sleep(new Integer(args[0]));
- t.interrupt();
- }
- }
Java多线程之线程结束清理的更多相关文章
- java多线程与线程间通信
转自(http://blog.csdn.net/jerrying0203/article/details/45563947) 本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程 ...
- Java多线程之线程的通信
Java多线程之线程的通信 在总结多线程通信前先介绍一个概念:锁池.线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞,称为锁池.每个对象都有自己的锁池的空间,用于放置等待运行的线程.这些 ...
- Java多线程之线程的同步
Java多线程之线程的同步 实际开发中我们也经常提到说线程安全问题,那么什么是线程安全问题呢? 线程不安全就是说在多线程编程中出现了错误情况,由于系统的线程调度具有一定的随机性,当使用多个线程来访问同 ...
- Java多线程之线程的控制
Java多线程之线程的控制 线程中的7 种非常重要的状态: 初始New.可运行Runnable.运行Running.阻塞Blocked.锁池lock_pool.等待队列wait_pool.结束Dea ...
- Java多线程父子线程关系 多线程中篇(六)
有的时候对于Java多线程,我们会听到“父线程.子线程”的概念. 严格的说,Java中不存在实质上的父子关系 没有方法可以获取一个线程的父线程,也没有方法可以获取一个线程所有的子线程 子线程的消亡与父 ...
- Java多线程02(线程安全、线程同步、等待唤醒机制)
Java多线程2(线程安全.线程同步.等待唤醒机制.单例设计模式) 1.线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量 ...
- Java多线程之线程的生命周期
Java多线程之线程的生命周期 一.前言 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(R ...
- Java多线程| 01 | 线程概述
Java多线程| 01 | 线程概述 线程相关概念 进程与线程 进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位.可以把进程简单的理解 ...
- Java多线程与线程池技术
一.序言 Java多线程编程线程池被广泛使用,甚至成为了标配. 线程池本质是池化技术的应用,和连接池类似,创建连接与关闭连接属于耗时操作,创建线程与销毁线程也属于重操作,为了提高效率,先提前创建好一批 ...
随机推荐
- JSBinding + SharpKit / 常见问题
运行时出现: Return a "System.Xml.XmlIteratorNodeList" to JS failed. Did you forget to export th ...
- NGUI Font
---------------------------------------------------------------------------------------------------- ...
- MySQL 5.5.35 单机多实例配置详解
一.前言 二.概述 三.环境准备 四.安装MySQL 5.5.35 五.新建支持多实例的配置文件(我这里配置的是四个实例) 六.初始化多实例数据库 七.提供管理脚本 mysqld_multi.serv ...
- jquery 自动补全控件(支持IE6)待整理
自动补全控件(兼容IE6):http://bassistance.de/ download地址:http://jquery.bassistance.de/autocomplete/jquery.aut ...
- Python Queue实现生产与消费
Python Queue模块详解 from:https://blog.linuxeye.com/334.html Python中,队列是线程间最常用的交换数据的形式.Queue模块是提供队列操作的模块 ...
- SqlServer中quotename用法与实例
语法 QUOTENAME ( 'character_string' [ , 'quote_character' ] ) 参数 'character_string' Unicode 字符数据构成的字符串 ...
- jQuery插件 -- 表单验证插件jquery.validate.js, jquery.metadata.js
原文地址:http://blog.csdn.net/zzq58157383/article/details/7718352 最常使用JavaScript的场合就是表单的验证,而jQuery作为一个 ...
- SVG中的'defs' and 'use'-可复用的图元定义
在下一个示例中,我使用了defs中的元素之前,定义了如何去展现图元. <?xml version="1.0" standalone="no"?> & ...
- jQuery Mobile_简单的爱情故事
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- 宝洁的Pvp
1.公司宗旨(Purpose) 我们生产和提供更佳品质及价值的产品,以改善全球消费者的生活.作为回报,我们将会获得领先的市场销售地位和利润增长,从而令我们的员工.我们的股东以及我们的生活.工作所处的社 ...