②synchronized同步代码块
2018-10-13 本文已影响0人
YNZXGWZM
- synchronized同步锁
package com.mc.testThread;
public class MySynchronized {
/**
* 同步锁释放的场景:
* 1.线程执行完成
* 2.当前线程有异常 比如 1/0;
* 两个线程调用同一把锁才可以同步,不同的锁互不影响(两个人上一个厕所,和两个人上两个厕所的区别)
* @param args
*/
public static void main(String[] args) {
MySynchronized mySynchronized1 = new MySynchronized();
MySynchronized mySynchronized2 = new MySynchronized();
//开启一个线程
new Thread("thread1") {
@Override
public void run() {
try {
synchronized (mySynchronized1) {
System.out.println(this.getName() + "开始工作了");
int i=1/0;
Thread.sleep(5000);
System.out.println("线程睡醒了");
System.out.println("线程结束了");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
new Thread("thread2") {
@Override
public void run() {
synchronized (mySynchronized1) {
System.out.println(this.getName() + " start");
System.out.println(this.getName() + " end");
}
}
}.start();
}
}
运行结果:
Exception in thread "thread1" thread1开始工作了
thread2 start
thread2 end
java.lang.ArithmeticException: / by zero
at com.mc.testThread.MySynchronized$1.run(MySynchronized.java:22)
Process finished with exit code 0
线程1开始工作,执行到 1/0的时候,报异常,立马释放锁,线程2开始执行。