当一个线程执行的代码出现异常时,其所持有的锁会自动释放

public class MyObject {

    private int i = 1;

    synchronized public void methodA() throws InterruptedException {
System.out.println("begin methodA threadName=" + Thread.currentThread().getName());
if(i==1){
throw new InterruptedException();
}
System.out.println("end methodA ");
} synchronized public void methodB() throws InterruptedException {
System.out.println("begin methodB threadName=" + Thread.currentThread().getName());
System.out.println(" end methodB");
}
}

ThreadA 和 ThreadB

public class ThreadA extends Thread {

    private MyObject myObject;

    public ThreadA(MyObject myObject){
this.myObject =myObject;
}
public void run(){
try {
myObject.methodA();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} public class ThreadB extends Thread { private MyObject myObject; public ThreadB(MyObject myObject){
this.myObject =myObject;
}
public void run(){
try {
myObject.methodB();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Run

public class Run {

    public static void main(String[] args) {
MyObject object = new MyObject();
ThreadA threadA = new ThreadA(object);
threadA.setName("A");
threadA.start(); ThreadB threadB = new ThreadB(object);
threadB.setName("B");
threadB.start();
}
}

最新文章

  1. Maven 集成Tomcat插件
  2. cocos2dx && Lua 环境配置
  3. czxt
  4. 异步等待时,在异步前弹出窗口的TIMER,不会TICK
  5. 【CentOS】安装chrome
  6. Android中图片的异步加载
  7. PHP 访问类中的静态属性
  8. Asp.Net2.0下C#环境 Login控件实现用户登录
  9. shell脚本编写步骤及其常用命令和符号
  10. 原生JS元素怎么取消事件
  11. htpasswd 命令详解
  12. 只有一百行的xss扫描工具——DSXS源码分析
  13. RSP小组——团队冲刺博客三
  14. java自动拆装箱(转载)
  15. Jenkins问题记录:android构建时提示Unzipping /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3-all.zip to /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9 Except
  16. JAVA课后作业01
  17. ogg 12.3 for sqlserver 2016 CDC模式配置
  18. SaaS教父:我眼中最糟糕的9条SaaS建议(转)
  19. Java SpringMVC框架学习(三)springMVC的执行流程
  20. 创建 HelloWorld 项目

热门文章

  1. Spring3.2+mybatis3.2+Struts2.3整合配置文件大全
  2. js数组转换成json串 (JSON.stringify)
  3. gradle 安装及设置本地仓库地址
  4. 编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)
  5. scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld
  6. iOS开发项目实战——Swift实现图片轮播与浏览
  7. android菜鸟之路-事件分发机制总结(二)
  8. 项目实战之poi导出excel
  9. Bridge Page
  10. Delphi中SendMessage使用说明(所有消息说明) good