zoukankan      html  css  js  c++  java
  • Java多线程(八) synchronized 抛出异常锁自动解除

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

    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();
            }
        }
    }
    View Code

    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();    
        }
    }
    View Code
  • 相关阅读:
    verilog 数组参数
    跨时钟域设计【一】——Slow to fast clock domain
    跨时钟域设计【二】——Fast to slow clock domain
    跨时钟域设计【三】—— 数据同步
    Vivado学习笔记_002
    使用modelsim仿真DDR3时编译出错的解决方法
    Modelsim仿真tcl脚本与wave.do文件
    %s 与 %0s在 verilog中的区别
    BFM1
    verilog 常用系统函数及例子
  • 原文地址:https://www.cnblogs.com/newlangwen/p/7596353.html
Copyright © 2011-2022 走看看