Java多线程编程概述
Java多线程的安全问题
Java多线程同步
Java多线程间的通信
Java线程Lock
Java多线程管理
保障线程安全的设计技术
Java锁的优化及注意事项
Java多线程集合
【Java多线程】单例模式与多线程

Java多线程出现异常会自动释放锁

package com.wkcto.intrinsiclock;

/**
 * 同步过程中线程出现异常, 会自动释放锁对象
 *
 * Author: 老崔
 */
public class Test09 {
    public static void main(String[] args) {
        //先创建Test01对象,通过对象名调用mm()方法
        Test09 obj = new Test09();

        //一个线程调用m1()方法
        new Thread(new Runnable() {
            @Override
            public void run() {
                obj.m1();       //使用的锁对象是Test06.class
            }
        }).start();

        //另一个线程调用sm2()方法
        new Thread(new Runnable() {
            @Override
            public void run() {
                Test09.sm2();    //使用的锁对象是Test06.class
            }
        }).start();

    }

    //定义方法,打印100行字符串
    public void m1(){
        //使用当前类的运行时类对象作为锁对象,可以简单的理解为把Test06类的字节码文件作为锁对象
        synchronized ( Test09.class ) {
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + " --> " + i);
                if ( i == 50){
                    Integer.parseInt("abc");    //把字符串转换为int类型时,如果字符串不符合 数字格式会产生异常
                }
            }
        }
    }

    //使用synchronized修饰静态方法,同步静态方法, 默认运行时类Test06.class作为锁对象
    public synchronized static  void sm2(){
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + " --> " + i);
            }
    }
}