zoukankan      html  css  js  c++  java
  • 2.1.7出现异常,锁自动释放

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

    package com.cky.bean;
    
    /**
     * Created by chenkaiyang on 2017/12/5.
     */
    public class Service {
       synchronized public void testMethod() {
           if (Thread.currentThread().getName().equals("A")) {
               System.out.println(Thread.currentThread().getName() +"  &  aaaaaaa");
               Integer.parseInt("a");
               System.out.println("end");
           } else {
               System.out.println(Thread.currentThread().getName() +"   &  bbbbb");
           }
        }
    
    
    }
    package com.cky.thread;
    
    import com.cky.bean.Service;
    
    /**
     * Created by chenkaiyang on 2017/12/5.
     */
    public class ThreadA extends Thread{
        private Service service;
        public ThreadA(Service service) {
            super();
            this.service = service;
        }
    
        @Override
        public void run() {
            super.run();
            service.testMethod();
        }
    }
    package com.cky.thread;
    
    import com.cky.bean.Service;
    
    /**
     * Created by chenkaiyang on 2017/12/5.
     */
    public class ThreadB extends  Thread{
        private Service service;
        public ThreadB(Service service) {
            super();
            this.service = service;
        }
    
        @Override
        public void run() {
            super.run();
            service.testMethod();
        }
    }
    package com.cky.test;
    
    import com.cky.bean.Service;
    import com.cky.thread.ThreadA;
    import com.cky.thread.ThreadB;
    
    /**
     * Created by chenkaiyang on 2017/12/2.
     */
    public class Test {
        public static void main(String[] args){
            try {
                Service service = new Service();
                ThreadA threadA = new ThreadA(service);
                threadA.setName("A");
                threadA.start();
                Thread.sleep(500);
                ThreadB threadB = new ThreadB(service);
                threadB.setName("B");
                threadB.start();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
    
        }
    }
    D:itjdk1.8injava -Didea.launcher.port=7539 "-Didea.launcher.bin.path=D:itideaIntelliJ IDEA 2016.3.3in" -Dfile.encoding=UTF-8 -classpath "D:itjdk1.8jrelibcharsets.jar;D:itjdk1.8jrelibdeploy.jar;D:itjdk1.8jrelibextaccess-bridge-64.jar;D:itjdk1.8jrelibextcldrdata.jar;D:itjdk1.8jrelibextdnsns.jar;D:itjdk1.8jrelibextjaccess.jar;D:itjdk1.8jrelibextjfxrt.jar;D:itjdk1.8jrelibextlocaledata.jar;D:itjdk1.8jrelibext
    ashorn.jar;D:itjdk1.8jrelibextsunec.jar;D:itjdk1.8jrelibextsunjce_provider.jar;D:itjdk1.8jrelibextsunmscapi.jar;D:itjdk1.8jrelibextsunpkcs11.jar;D:itjdk1.8jrelibextzipfs.jar;D:itjdk1.8jrelibjavaws.jar;D:itjdk1.8jrelibjce.jar;D:itjdk1.8jrelibjfr.jar;D:itjdk1.8jrelibjfxswt.jar;D:itjdk1.8jrelibjsse.jar;D:itjdk1.8jrelibmanagement-agent.jar;D:itjdk1.8jrelibplugin.jar;D:itjdk1.8jrelib
    esources.jar;D:itjdk1.8jrelib
    t.jar;F:springboot	hreaddemooutproduction	hreaddemo;D:itideaIntelliJ IDEA 2016.3.3libidea_rt.jar" com.intellij.rt.execution.application.AppMain com.cky.test.Test
    A  &  aaaaaaa
    Exception in thread "A" java.lang.NumberFormatException: For input string: "a"
        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 com.cky.bean.Service.testMethod(Service.java:10)
        at com.cky.thread.ThreadA.run(ThreadA.java:18)
    B   &  bbbbb
    
    Process finished with exit code 0

     线程a出现异常后释放锁,这时线程b可进入执行方法

  • 相关阅读:
    .net Delegate
    Kaprekar constant(卡普雷卡尔黑洞)
    How to get URL and QueryString value in an ASP.NET page
    Jquery and ashx achieve login of ajax
    MAC 开发笔记——Objective C 语法之Category和Extension
    MAC 开发笔记 - ObjectiveC 语法之selector
    肮脏的选择
    MAC Air 使用手记
    MAC 开发笔记——Objective C 之 基础设计模式
    太平洋战争——比B.o.B还是差了点
  • 原文地址:https://www.cnblogs.com/edison20161121/p/7967440.html
Copyright © 2011-2022 走看看