synchronized修饰static方法与非static方法的区别

2023-10-27

  1. 当synchronized修饰一个static方法时,多线程下,获取的是类锁(即Class本身,注意:不是实例),作用范围是整个静态方法,作用的对象是这个类的所有对象。

  2. 当synchronized修饰一个非static方法时,多线程下,获取的是对象锁(即类的实例对象),作用范围是整个方法,作用对象是调用该方法的对象。
    结论:类锁和对象锁不同,他们之间不会产生互斥。

public class SynchoronizedDemo {

    //synchronized修饰非静态方法
    public synchronized void function() throws InterruptedException {
        for (int i = 0; i <3; i++) {
            Thread.sleep(1000);
            System.out.println("function running...");
        }
    }
    //synchronized修饰静态方法
    public static synchronized void staticFunction()
            throws InterruptedException {
        for (int i = 0; i < 3; i++) {
            Thread.sleep(1000);
            System.out.println("Static function running...");
        }
    }

    public static void main(String[] args) {
        final SynchoronizedDemo demo = new SynchoronizedDemo();
        Thread t1 = new Thread(new Runnable() {
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

synchronized修饰static方法与非static方法的区别 的相关文章

  • Java中遍历所有文件

    我想让我的程序打印我计算机上所有文件的巨大列表 我的问题是 当我希望它打印位于我的计算机上的所有文件时 它仅打印第一个硬盘驱动器的第一个文件夹中的文件 有什么想法我在这里做错了什么吗 谢谢 这是我使用的代码 Main import java
  • 从我们的 Java 程序执行 Java 程序

    I used Runtime getRuntime exec 但它抛出了IOException如下 java io IOException CreateProcess c error 5 at java lang Win32Process
  • Gradle 发布两次尝试将 RPM 上传到 Artifactory YUM 存储库,第二次失败并显示 403

    我正在尝试使用 gradle 和 ivy publish 插件将 RPM 工件发布到 Artifactory 上的本地 YUM 存储库 我遇到的问题是 发布任务似乎尝试上传工件两次 第二次尝试失败 正确 HTTP 状态代码为 403 我进行
  • 如何使用appium和java在Android中向下滚动以单击元素?

    我想知道如何使用appium和java向下滚动以单击Android中的元素 我里面有一个元素列表 android support v7 widget RecyclerView由于它有10多个元素 所以我们需要滑动屏幕才能看到下面的元素 每个
  • 从java管理unix进程的最佳方法是什么?

    我正在寻找一些简单的任务 例如列出用户的所有正在运行的进程 或者通过pid等杀死特定进程 来自Java的基本unix进程管理 有没有相对成熟且有文档的库 我可以从 JVM 运行外部命令 然后解析标准输出 错误 但这似乎需要大量工作 而且一点
  • Java 1.6 和 Desktop.open() 的问题

    我一直在使用 Destop open 在 Windows 计算机 Vista 和 XP 上启动 pdf 查看器 并且大多数都工作得很好 但是 在一台 XP 计算机上 该调用不起作用 只是返回而不抛出任何异常 并且查看器不会启动 据我所知 在
  • 为什么java.util.Collection不直接定义next()、hasNext()呢?

    If 收藏定义有下一个 代替迭代器 hasNext 我们可以更容易地编写循环 while collection hasNext 代替 Iterator it collection iterator While it hasNext 当然 我
  • 在jodatime中计算一个月的周数

    jodatime 可以计算一个月的周数吗 我需要这样的东西 月份 七月 第 27 年的一周 1 7 七月 第 28 年的一周 9 14 七月 第 29 年的一周 16 21 七月 第 30 年的一周 23 31 七月 月份 八月 第 31
  • 如何将背景图像设置到 JPanel 中的 JTextArea

    我想在JTextArea 我在谷歌上查找过 但没有结果 背景可能是一个标志 我也想知道如何设置背景的分辨率 我的包中只有一门课 我有一个 MySQL 连接器驱动程序作为参考库 我的工作台是 Eclipse 使用 Fat jar 插件导出 j
  • 正则表达式忽略引号之间的文本

    我有一个正则表达式 它是 s 这用于分割字符串 但我不想让它分开 如果它在引号中 我不会使用 split 而是使用 Pattern 和 Matcher A demo import java util regex Matcher import
  • JOOQ初始化DAO最佳方法

    我想知道初始化 JOOQ 生成 DAO 的最佳实践 现在 我使用以下方法来初始化 JOOQ 生成的 DAO 在以下情况下 Student Dao 是 JOOQ 生成的 public class ExtendedStudentDAO exte
  • jSoup 检查跨度类是否存在

    我有一个具有以下格式的 HTML
  • Scala - InvalidClassException:没有有效的构造函数

    我创建了一个Serializable番石榴的版本ImmutableRangeMap and Builder在 Scala 中以便在我的 Spark 应用程序中使用 我的构造函数中有一个零参数SerializableImmutableRang
  • MyBatis 遵循 JPA 吗?

    作为我的第一个 ORM 我已经使用 myBatis 几个月了 现在我正在尝试学习其他东西 例如 Hibernate JPA 起初很难理解 Hibernate 和 JPA 之间的区别 经过几分钟的研究 我明白 JPA 只是一个规范 Hiber
  • 使用Optional进行空检查

    我想使用可选实用程序在 JDK8 中执行空检查 这是我正在编写的代码 它给了我一个错误 java util Optional stringToUse java util Optional of childPage getContentRes
  • Maven build 编译错误:无法在项目 Maven 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile)

    我有一个 Maven 项目 从 git 存储库分叉并克隆到我的 Eclipse 上 它是基于 Java 8 构建的 我做的第一件事是执行 mvn clean install 但我收到以下失败消息 INFO Scanning for proj
  • Log4j 不打印完整的堆栈跟踪

    我检查了 SO 中的所有答案 但没有一个真正帮助我 我的 Log4j 属性文件 log4j rootLogger debug console file log4j appender console org apache log4j Cons
  • 如何用java实现FTP?

    我正在使用 FTP 我必须在客户端将消息嵌入到图像文件中 并且我必须将其发送到服务器 在服务器端我必须检索图像文件并然后我将检索该消息 我已经完成了嵌入消息并使用密码学和隐写术技术检索消息 我正在寻找如何将该文件从客户端传输到服务器 我必须
  • 如何处理 Sonarlint java:S2259 (空指针不应取消引用)

    if res getBody null res getBody getServiceResult null return 在上面的代码中 sonarlint 抱怨说 SonarLint 可能会抛出 NullPointerException
  • 可选的比较器

    I have abstract class OptionalComparator

随机推荐

  • 出现 conda虚拟环境默认放在C盘 解决方法

    目录 1 问题所示 2 原理分析 3 解决方法 3 1 方法一 3 2 方法二 1 问题所示 通过conda配置虚拟环境的时候 由于安装在D盘下 但是配置的环境默认都给我放C盘 通过如下命令 conda env list 最后查看该环境的确
  • shopify theme 跨境电商开发 liquid

    shopify theme 多语言国际化开发 shopify theme 跨境电商开发 liquid 本地编辑shopify主题的方式一 shopify cli 的命令 最近有有一个叫做shopify的跨境电商的东西需要开发一些主题和模板
  • [CentOS Python系列] 六.阿里云搭建Django网站详解

    本篇文章主要介绍讲述部署阿里云服务器Django网站环境 并通过IP地址访问网页的过程 写代码过程中往往第一步需要解决的就是配置开发环境 对于新手来说 这是非常头疼的事情 而当配置好之后或者对于老手来说 我们才能去实现理想的功能 基础性文章
  • linux安装node_exporter

    下载 Download Prometheus 解压 tar xvzf node exporter 1 5 0 darwin amd64 tar gz 解压后有三个文件 分别是LICENSE node exporter NOTICE 将nod
  • 物体无法碰撞导入的空气墙?

    在使用unity导入场景的时候 可能会因为编码问题导致导入的空气墙的Layer是空的 导致无法碰撞 解决方案 1 此时只需要给导入的空气墙设置Layer 2 在项目的 Edit gt Project Settings 的 如下 在图层矩阵中
  • Flutter屏幕适配

    文章目录 Flutter屏幕适配 一 Flutter中的单位 1 1 点 points 1 2 像素 pixels 1 3 设备像素比 devicePixelRatio 二 适配方案 2 1 rpx 适配 2 2 flutter scree
  • KEIL5使用技巧

    目录 1 文本美化 2 代码编辑技巧 1 TAB 键的妙用 2 快速位函数 变量被定义的地方 3 快速注释与快速消注释 3 其他小技巧 下面 向大家介绍KEIL5 软件的一些使用技巧 这些技巧在代码编辑和编写方面会非常有用 1 文本美化 文
  • NGSIM数据集处理-添加标签、特征标准化

    添加标签 对向左向右换道数据添加不同的标签 usr bin env python coding utf 8 In 1 import csv import pandas as pd f2 pd read csv CL train41 csv
  • django设置models.Model数据可以为空

    添加设置 null True blank True 比如 size models CharField max length 255 default null True blank True
  • 华为OD机试 - 分苹果 - 二进制(Java 2023 B卷 100分)

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 核心算法 按照二进制加法计算 并且不计算进位 但是 B希望在满足A的情况下获取苹果重量最多 华为OD机
  • 神州云服务平台(型号:DCC-CRL1000)基本配置教学视频

    教学视频只提供网络搭建与应用技能大赛第二部分基本配置部分视频 仅供大家学习使用 2021年全国职业院校网络搭建及应用第二部分基本配置视频 由于在线播放视频有点模糊 所以给大家提供清晰的教学视频下载链接 神州云服务平台 型号 DCC CRL1
  • 教你如何看懂EMC空间辐射测试报告

    空间辐射测试是最常做的EMC电磁兼容测试项目之一 也是最容易出现问题的一个测试项目 对很多刚接触EMC的朋友来讲 拿到EMC的测试数据 往往感觉比较陌生 不知道怎么看这份数据 相信看完以下内容 你就不会陌生了 专业测试辐射的场所是屏蔽室 主
  • 单片机开发入坑指南

    入坑前了解 什么是单片机 单片机英文名Microcontrollers 即微控制器 英文简称MCU 单片机是一种集成电路芯片 是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU 随机存储器RAM 只读存储器ROM 多种I O口和
  • 第十讲:神州三层交换机配置单区域OSPF路由协议

    关于OSPF 其中的几个基本概念需要了解 OSPF是开放式最短路径优先的缩写 OSPF的协议号是89 OSPF协议中的Router ID是一台路由器的唯一标识 在整个白治系统中唯一 Router ID从路由器的接口lP地址中选择出来 选择的
  • win10从控制台直接进入Anaconda Prompt环境

  • Uboot 编译失败问题

    编译失败问题汇总 索引 一 已经有uboot源码 并且有 build sh 的情况 一 已经有uboot源码 并且有 build sh 的情况 首先Makefile 没有配置编译器 导致的错误 错误提示信息如下 cc1 error bad
  • day27

    1 网络编程 a 软件 客户端 CS架构 client gt server 浏览器 BS架构 browser gt server b 如何实现相互通信 需求一 编写两个软件 软件之间相互通信 需求二 两个人直接连接 网线 需求三 教室相互通
  • 洛谷P1023 税收与补贴问题

    题目描述 你是某家咨询公司的项目经理 现在你已经知道政府对某种商品的预期价格 以及在各种价位上的销售情况 要求你确定政府对此商品是应收税还是补贴的最少金额 也为整数 才能使商家在这样一种政府预期的价格上 获取相对其他价位上的最大总利润 总利
  • Win10+RTX3060配置CUDA等深度学习环境

    Win10 RTX3060机器学习环境配置 1 下载准备 2 下载安装CUDA和CUDNN 2 1 cuda和cudnn下载 2 2 cuda和cudnn安装 3 安装GPU版pytorch与TensorFlow 3 1 下载 3 2 安装
  • synchronized修饰static方法与非static方法的区别

    当synchronized修饰一个static方法时 多线程下 获取的是类锁 即Class本身 注意 不是实例 作用范围是整个静态方法 作用的对象是这个类的所有对象 当synchronized修饰一个非static方法时 多线程下 获取的是