美文网首页
②synchronized同步代码块

②synchronized同步代码块

作者: YNZXGWZM | 来源:发表于2018-10-13 10:36 被阅读0次
    1. 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开始执行。

    相关文章

      网友评论

          本文标题:②synchronized同步代码块

          本文链接:https://www.haomeiwen.com/subject/xgfoaftx.html