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
  • 相关阅读:
    详细的git入门级别,从安装到实战
    Linux安装maven超级详细步骤
    比较全的开源软件镜像地址
    区块链应用领域
    区块链来源比特币,区块链基础构造
    xpath定位总结--精简版
    python装饰器
    python六剑客
    Python断言方法:assert
    python3对excel读写openpyxl
  • 原文地址:https://www.cnblogs.com/newlangwen/p/7596353.html
Copyright © 2011-2022 走看看