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
  • 相关阅读:
    面向对象第6课——多态——接口
    面向对象第6课——多态——抽象
    面向对象第5课——转型
    面向对象第5课——继承
    bank
    0923异常——练习题目作业
    0923接口——练习题作业
    0922继承,练习题目-作业
    RecyclerView三列展示及单列展示
    bitmap转换为drawable
  • 原文地址:https://www.cnblogs.com/newlangwen/p/7596353.html
Copyright © 2011-2022 走看看