zoukankan      html  css  js  c++  java
  • 五、synchronized细节

    public class test {
        public static void main(String[] args) {
            Phone phone = new Phone();
    
            new Thread(() -> {
                phone.sendEmail();
            }).start();
    
            new Thread(() -> {
                phone.sendSms();
            }).start();
    
            new Thread(() -> {
                phone.sendHello();
            }).start();
        }
    }
    
    class Phone {
        public synchronized void sendEmail() {
            System.out.println("sendEmail。。。");
            try {
                System.out.println("暂停3秒钟");
                TimeUnit.SECONDS.sleep(3);
                System.out.println("暂停完成");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        public synchronized void sendSms() {
            System.out.println("sendSms。。。");
        }
    
        public void sendHello() {
            System.out.println("sendHello。。。");
        }
    }

    输出

    sendEmail。。。
    暂停3秒钟
    sendHello。。。
    暂停完成
    sendSms。。。

     说明:

    1、一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法,其他的线程都只能等待。

    2、synchronized锁的是当前对象this,被锁定后,其他线程都不能进入当前对象的其他的synchronized方法。

    3、未加synchronized修饰的方法,不会有竞争关系,可以直接调用。

    4、对于普通同步方法,synchronized锁的是当前实例对象,通常值this,所有的普通同步方法用的都是同一把锁——实例对象本身。

    5、对于static静态同步方法,synchronized锁的是当前类的Class对象,如.class唯一的一个模板。

    6、对于同步方法块,锁的是synchronized括号内的对象。

  • 相关阅读:
    spring入门-day01
    HTML概述
    day21-基础加强
    iptables
    25个iptables常用示例
    Linux安全调优1:CentOS防火墙的设置与优化
    sessionStorage 的数据会在同一网站的多个标签页之间共享吗?这取决于标签页如何打开
    JavaScript reduce() 方法
    classList属性和className的区别
    NPM 学习笔记整理
  • 原文地址:https://www.cnblogs.com/shiblog/p/15718880.html
Copyright © 2011-2022 走看看