synchronized锁的内容

import java.util.concurrent.TimeUnit;

class Test1 {

    public static void main(String[] args) {
Phone phone = new Phone(); new Thread(() -> {
phone.sendMsg();
}, "A").start(); try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
} new Thread(() -> {
phone.call();
}, "B").start(); }
} class Phone { // 锁的是方法的调用者
// 用的是同一个锁,谁先拿到谁执行
public synchronized void sendMsg() {
try {
TimeUnit.SECONDS.sleep(4);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("发短信");
} public synchronized void call() {
System.out.println("打电话");
}
}
import java.util.concurrent.TimeUnit;

class Test2 {
public static void main(String[] args) {
// 一个对象只有一把锁
Phone2 phone = new Phone2(); new Thread(() -> {
phone.sendMsg();
}, "A").start(); try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
} new Thread(() -> {
phone.hello();
}, "B").start(); // 先hello后发短信
}
} class Phone2 {
// 锁的是方法的调用者
// 用的是同一个锁,谁先拿到谁执行
public synchronized void sendMsg() {
try {
TimeUnit.SECONDS.sleep(4);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("发短信");
} public synchronized void call() {
System.out.println("打电话");
} // 没有锁,不是同步方法,不受锁的影响
public void hello() {
System.out.println("hello");
}
}
import java.util.concurrent.TimeUnit;

class Test3 {
public static void main(String[] args) {
// 一个对象只有一把锁
// 两个对象的Class类模板只有一个,static锁的是class
Phone3 phone1 = new Phone3();
Phone3 phone2 = new Phone3(); new Thread(() -> {
phone1.sendMsg();
}, "A").start(); try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
} new Thread(() -> {
phone2.call();
}, "B").start(); // 先短信后打电话
}
} // 两个静态的锁
// 类一加载就有了,锁的是Class
class Phone3 {
public static synchronized void sendMsg() {
try {
TimeUnit.SECONDS.sleep(4);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("发短信");
} public static synchronized void call() {
System.out.println("打电话");
} }
import java.util.concurrent.TimeUnit;

class Test4 {
public static void main(String[] args) {
// 一个对象只有一把锁
// 两个对象的Class类模板只有一个,static锁的是class
Phone4 phone1 = new Phone4();
Phone4 phone2 = new Phone4(); new Thread(() -> {
phone1.sendMsg();
}, "A").start(); try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
} new Thread(() -> {
phone2.call();
}, "B").start(); // 先打电话后发短信
}
} class Phone4 { // 锁的是Class
public static synchronized void sendMsg() {
try {
TimeUnit.SECONDS.sleep(4);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("发短信");
} // 普通同步方法 锁的是调用者
public synchronized void call() {
System.out.println("打电话");
} }

synchronized锁的内容的更多相关文章

  1. Java多线程6:Synchronized锁代码块(this和任意对象)

    一.Synchronized(this)锁代码块 用关键字synchronized修饰方法在有些情况下是有弊端的,若是执行该方法所需的时间比较长,线程1执行该方法的时候,线程2就必须等待.这种情况下就 ...

  2. 015-线程同步-synchronized几种加锁方式、Java对象头和Monitor、Mutex Lock、JDK1.6对synchronized锁的优化实现

    一.synchronized概述基本使用 为确保共享变量不会出现并发问题,通常会对修改共享变量的代码块用synchronized加锁,确保同一时刻只有一个线程在修改共享变量,从而避免并发问题. syn ...

  3. java的多线程安全,ReentrantLock与synchronized锁

    前言 多线程总的来说是一个很大的模块,所以虽然之前就想写但一直感觉有地方没有理解透,在经过了一段时间学习后,终于有点感觉了,在此写下随笔. 多线程安全问题##: 首先和大家讨论一下多线程为什么会不安全 ...

  4. 【从刷面试题到构建知识体系】Java底层-synchronized锁-1

    在技术论坛中,经常看到一种言论:面试造火箭,干活拧螺丝.我们平时写的大部分代码的确是CRDU,再提一个层次,也无非就是揉进去复杂一些的业务逻辑,把一堆的CRDU组合起来. 那么问题来了:我们提倡的研究 ...

  5. 【从刷面试题到构建知识体系】Java底层-synchronized锁-2偏向锁篇

    上一篇通过构建金字塔结构,来从不同的角度,由浅入深的对synchronized关键字做了介绍, 快速跳转:https://www.cnblogs.com/xyang/p/11631866.html 本 ...

  6. Java性能之synchronized锁的优化

    synchronized / Lock 1.JDK 1.5之前,Java通过synchronized关键字来实现锁功能 synchronized是JVM实现的内置锁,锁的获取和释放都是由JVM隐式实现 ...

  7. synchronized锁机制的实现原理

    Synchronized 锁机制的实现原理 Synchronized是Java种用于进行同步的关键字,synchronized的底层使用的是锁机制实现的同步.在Java中的每一个对象都可以作为锁. J ...

  8. 【大厂面试07期】说一说你对synchronized锁的理解?

    synchronized锁的原理也是大厂面试中经常会涉及的问题,本文主要通过对以下问题进行分析讲解,来帮助大家理解synchronized锁的原理. 1.synchronized锁是什么?锁的对象是什 ...

  9. 并发编程之synchronized锁(一)

    一.设计同步器的意义 多线程编程中,有可能会出现多个线程同时访问同一个共享.可变资源的情况,这个资源我们称之其为临界资源:这种资源可能是:对象.变量.文件等. 共享:资源可以由多个线程同时访问 可变: ...

  10. Lock、Synchronized锁区别解析

    上篇博文在讲解 ConcurrentHashMap 时说到 1.7 中 put 方法实现同步的方式是使用继承了 ReentrantLock 类的 segment 内部类调用 lock 方法实现的,而在 ...

随机推荐

  1. 为什么我要弃用华为的软件产品——mindspore从入门到放弃之感想

    从本博主前段时间的博文就可以看到博主写了好多关于华为软件mindspore的入门资料和编译方法以及一些bug的修复,但是无奈之下发现这些简单而且显而易见的bug不仅长期存在与软件中而且在提交PR后而一 ...

  2. 如何拉取指定CPU架构并且指定ubuntu版本并且指定cuda和cudnn版本的docker镜像

    本篇讲的重点是如何拉取带有cuda和cudnn的docker镜像,因此这些的镜像源的频道为NVIDIA: 官方地址: https://hub.docker.com/r/nvidia/cuda 根据官方 ...

  3. 最小二乘法的矩阵正则化改进——“岭回归”和“LASSO回归”算法

    看代码过程中发现了一个很奇怪的概念,叫做"最小二乘法的矩阵正则化",这个词汇十分的陌生,虽然最小二乘法是知道的,但是用了矩阵正则化的最小二乘法是个什么东西呢? 相关代码见: 强化学 ...

  4. gym.ObservationWrapper使用时的注意点——reset和step函数可以覆盖observation函数

    记录一个刚学习到的gym使用的点,就是gym.ObservationWrapper使用时的注意点--reset和step函数可以覆盖observation函数. 给出代码: import gym cl ...

  5. DolphinScheduler 3.3.0版本更新一览

    Apache DolphinScheduler即将迎来3.3.0版本的发布,届时将有一系列重要的更新和改进.在近期的社区5月份用户线上分享会上,项目PMC 阮文俊为大家介绍了3.3.0版本将带来的主要 ...

  6. Java和LWJGL的关于OpenAL的文章

    一.OpenAL的原理和基本概念: 1.1 OpenAL的架构 OpenAL的架构同样基于三个核心组件:Context(上下文).Source(声源)和Buffer(缓冲区).Context代表了音频 ...

  7. Webpack 核心流程

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:霜序 三个阶段 初始化阶段 初始化参数:从配置文件.配置对 ...

  8. 【YashanDB知识库】ycm纳管主机安装YCM-AGENT时报错“任务提交失败,无法连接主机”

    问题现象 执行安装ycm-agent命令纳管主机时报错 问题的风险及影响 会导致ycm-agent纳管不成功,YCM无法监控主机和数据库 问题影响的版本 yashandb-cloud-manager- ...

  9. vlan 技术

    Ref: VLAN及Trunk,重要!看瑞哥如何讲的明明白白! 图文并茂VLAN以及Trunk详解,超级详细

  10. 基于GitLab+Jenkin-CICD方案实践

    前言 笔录于2022- 官网:https://about.gitlab.com/ 参考文档:https://docs.gitlab.com/ee/ci/ 清华源:清华大学开源软件镜像站 | Tsing ...