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);
}
}
}