2.1.7出现异常的线程自动释放锁
来源:互联网 发布:网络割接方案 编辑:程序博客网 时间:2024/06/05 10:36
package cha02.execise09;/** * Created by sunyifeng on 17/9/24. */public class Service { synchronized public void testMethod() { if (Thread.currentThread().getName().equals("a")) { System.out.println("thread name:" + Thread.currentThread().getName() + ",当前时间:" + System.currentTimeMillis()); while (true) { if (("" + Math.random()).substring(0, 8).equals("0.123456")) { System.out.println("thread name:" + Thread.currentThread().getName() + ",当前时间:" + System.currentTimeMillis()); // TODO: 这里出现异常 Integer.parseInt("a"); } } } else { System.out.println("Thread B run time = " + System.currentTimeMillis()); } }}
package cha02.execise09;/** * Created by sunyifeng on 17/9/24. */public class ThreadA extends Thread { private Service service; public ThreadA(Service service) { super(); this.service = service; } @Override public void run(){ service.testMethod(); }}
package cha02.execise09;/** * Created by sunyifeng on 17/9/24. */public class ThreadB extends Thread { private Service service; public ThreadB(Service service) { super(); this.service = service; } @Override public void run(){ service.testMethod(); }}
package cha02.execise09;/** * Created by sunyifeng on 17/9/24. */public class Test { public static void main(String[] args) { try { Service service = new Service(); // 线程A ThreadA threadA = new ThreadA(service); threadA.setName("a"); threadA.start(); Thread.sleep(0); // 线程B ThreadB threadB = new ThreadB(service); threadB.setName("b"); threadB.start(); } catch (InterruptedException e) { e.printStackTrace(); } }}
运行结果:thread name:a,当前时间:1507651297645
Exception in thread "a" thread name:a,当前时间:1507651298658
java.lang.NumberFormatException: For input string: "a"
Thread B run time = 1507651298658
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at cha02.execise09.Service.testMethod(Service.java:14)
at cha02.execise09.ThreadA.run(ThreadA.java:16)
程序分析:
1、当某个线程出现异常时,自动释放锁;
2、其他线程获取对象锁后,可继续执行。
阅读全文
0 0
- 2.1.7出现异常的线程自动释放锁
- java线程安全之synchronized锁重入及出现异常锁自动释放(五)
- java线程持锁状态下出现异常会释放锁
- 从头认识多线程-2.6 当异常出现时,线程自动释放锁
- 异常处理中对象的自动释放
- java中synchronization修饰的同步块的同步原理及出现异常时的自动资源释放原理
- 关于锁的自动释放
- Python 线程,with的作用(自动获取和释放锁Lock)
- Informix如何释放异常的锁资源
- 异常与锁的释放(synchronized )
- JAVA 线程出现异常
- 用C++实现锁的自动释放
- pthread_cancel 线程取消以及锁的释放
- pthread_cancel 线程取消以及锁的释放
- 线程中释放锁的方式
- 线程中释放锁的方式
- Delphi 线程的释放
- 停止线程出现“正在中止线程”的异常
- 1.python及介绍
- linux ubuntu 14. 04下 OpenJdk7编译
- MFC复选框Checkbox
- 树的直径模板
- 正向代理与反向代理的区别
- 2.1.7出现异常的线程自动释放锁
- 利用一个portlet:resourceURL标签发送AJAX请求
- hdu 1025 Constructing Roads In JGShining's Kingdom
- 《Kotlin项目实战开发》 第4章 类与面向对象编程
- 数据结构(一)--ArrayList and LinkerList
- Matlab 对路径的操作及读写文件
- Android 必知必会
- C语言-位操作技巧
- 集合源码学习(三):ArrayList