简介
- 当前线程调用同步方法出现异常时,自动释放锁,不影响其他线程的使用.
代码示例
public class Test06 {
int i = 0;
synchronized void m() {
System.out.println(Thread.currentThread().getName() + " - start ");
while(true) {
i ++;
System.out.println(Thread.currentThread().getName() + " - " + i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(i == 5) {
i = 1/0;
}
}
}
public static void main(String[] args) {
Test06 t = new Test06();
new Thread(() -> {
t.m();
}).start();
new Thread(() -> {
t.m();
}).start();
}
}
运行结果
Thread-0 - start
Thread-0 - 1
Thread-0 - 2
Thread-0 - 3
Thread-0 - 4
Thread-0 - 5
Exception in thread "Thread-0" Thread-1 - start
Thread-1 - 6
java.lang.ArithmeticException: / by zero
at synchronize.Test06.m(Test06.java:20)
at synchronize.Test06.lambda$main$0(Test06.java:29)
at java.lang.Thread.run(Thread.java:748)
Thread-1 - 7
Thread-1 - 8
Thread-1 - 9
Thread-1 - 10
Thread-1 - 11
...
QA
try {
}catch(Exception) {
//异常处理即可
}