1,被 synchronized 修饰的方法,锁的对象是方法的调用者(实例对象)

2,被 static 修饰的方法,锁的对象就是 Class模板对象,这个则全局唯一

问题7: 一个普通同步方法,一个静态同步方法,只有一个手机,请问先执行sendEmail 还是 sendSMS

public class LockDemo07 {
public static void main(String[] args) throws InterruptedException {
Phone7 phone = new Phone7(); new Thread(() -> {
try {
phone.sendEmail();
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "A").start(); TimeUnit.SECONDS.sleep(1); new Thread(() -> {
phone.sendSMS();
}, "B").start();
} } class Phone7 { public static synchronized void sendEmail() throws InterruptedException {
TimeUnit.SECONDS.sleep(3);
System.out.println("sendEmail");
} public synchronized void sendSMS() {
System.out.println("sendSMS");
} }

答案:sendSMS
synchronized 锁的是这个调用的对象
static 锁的是这个类的Class模板
这里是两个锁!

JUC-八锁现象和不安全锁的更多相关文章

  1. (三)juc高级特性——虚假唤醒 / Condition / 按序交替 / ReadWriteLock / 线程八锁

    8. 生产者消费者案例-虚假唤醒 参考下面生产者消费者案例: /* * 生产者和消费者案例 */ public class TestProductorAndConsumer { public stat ...

  2. JUC-线程八锁

    1,一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待, 换句话说,某一个时刻内,只能有唯一一个线程去访 ...

  3. 读-写锁 ReadWriteLock & 线程八锁

    读-写锁 ReadWriteLock: ①ReadWriteLock 维护了一对相关的锁,一个用于只读操作, 另一个用于写入操作. 只要没有 writer,读取锁可以由 多个 reader 线程同时保 ...

  4. JUC.Lock(锁机制)学习笔记[附详细源码解析]

    锁机制学习笔记 目录: CAS的意义 锁的一些基本原理 ReentrantLock的相关代码结构 两个重要的状态 I.AQS的state(int类型,32位) II.Node的waitStatus 获 ...

  5. java多线程 -- 线程八锁

    一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些 ...

  6. GUC-10 线程八锁

    /* * 题目:判断打印的 "one" or "two" ? * * 1. 两个普通同步方法,两个线程,标准打印, 打印? //one two * 2. 新增 ...

  7. Java多线程——线程八锁案例分析

    Java多线程——线程八锁案例分析 摘要:本文主要学习了多线程并发中的一些案例. 部分内容来自以下博客: https://blog.csdn.net/dyt443733328/article/deta ...

  8. JUC 并发编程--03, 深刻理解锁, 8 锁现象,

    如何判断锁的是谁? 永远知道是什么锁, 线程8锁:就是关于锁的8个问题 问题1: public class LockDemo01 { public static void main(String[] ...

  9. JUC同步锁(五)

    根据锁的添加到Java中的时间,Java中的锁,可以分为"同步锁"和"JUC包中的锁". 一.同步锁--synchronized关键字 通过synchroniz ...

随机推荐

  1. django项目班笔记-注册功能

    目录 一.用户模型设计 1.用户表字段分析 2.用户模式设计 二.执行迁移 三.图形验证码 四.将图形验证加入到前端文件中 验证码生成源码:https://files.cnblogs.com/file ...

  2. eclipse web 项目配置 运行

  3. [LC] 271. Encode and Decode Strings

    Design an algorithm to encode a list of strings to a string. The encoded string is then sent over th ...

  4. 吴裕雄--天生自然 JAVA开发学习:序列化

    public final void writeObject(Object x) throws IOException public final Object readObject() throws I ...

  5. ready vs onload

    1 ready事件:当DOM载入就绪,可以查询,操纵时绑定一个要执行的函数.它可以极大地提高web应用程序的响应速度. 2  onload事件:js中的方法,网页的所有元素.图片全部加载完毕才执行这个 ...

  6. vue2.0学习之基础内容

    import BScroll from 'better-scroll'; import star from '../star/star.vue'; import split from '../spli ...

  7. 关联规则之Aprior算法

    关联规则挖掘在电商.零售.大气物理.生物医学已经有了广泛的应用,本篇文章将介绍一些基本知识和Aprori算法. 啤酒与尿布的故事已经成为了关联规则挖掘的经典案例,还有人专门出了一本书<啤酒与尿布 ...

  8. ABC Fennec VS. Snuke

    题目描述 Fennec and Snuke are playing a board game. On the board, there are N cells numbered 1 through N ...

  9. python实现使用代码进行代理配置

    #!/usr/local/bin/python3.7 import urllib.request import urllib.parse # 创建handler handler = urllib.re ...

  10. redis的集群:

    集群策略:主从复制哨兵集群 参考:https://blog.csdn.net/q649381130/article/details/79931791 集群又分为如下:客户端分片基于代理的分片路由查询参 ...