Java多线程编程基础篇(二)-多线程同步关键字

2023-11-14

一、多线程同步关键字-synchronized

1.概念

    synchronized保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性。当多个并发线程访问同一个对象object中的同步代码块时,一个时间内只有一个线程能够得到执行,另一个线程必须等到当前线程执行完这个代码块之后才能执行,但是其他的线程仍然能够访问该object中的非synchronized同步代码块。

2.使用方法

    java中每一个对象都可以作为锁,这是synchronized实现同步的基础:

  • 修饰实例方法:锁是当前实例对象
  • 修饰静态方法:锁是当前类的class对象
  • 修饰代码块:锁是括号里的对象

(1)修饰实例方法

    当synchronized作用于实例方法时,所示其实例对象。

    在下面的例子中定义了一个静态变量num,定义了一个incr()方法对num进行+1的操作,在run方法中是循环调用incr方法5次。最后在main方法中是创建了两个线程对num进行操作。在该方法中synchronized修饰的是实例方法incr,此时线程的锁便是实例对象instance。

    一个对象只有一把锁,当一个线程获取了该对象的锁之后,其他的线程就无法获取该对象的锁,但是其他的对象还是可以访问该实例对象的其他非synchronized方法。

public class Test1 implements Runnable{
	
	public static int num = 0;
	
	public synchronized void incr() {
		num++;
		System.out.println("Thread-Id:"+Thread.currentThread().getId()+" num="+num);
	}
	
	@Override
	public void run() {
	    for(int i = 0; i< 5; i++) {
	    	incr();
	    }
	}
	
	public static void main(String[] args) throws InterruptedException {
		Test1 test1 = new Test1();
		Thread t1 = new Thread(test1);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java多线程编程基础篇(二)-多线程同步关键字 的相关文章

  • JavaMail Gmail 问题。 “准备启动 TLS”然后失败

    mailServerProperties System getProperties mailServerProperties put mail smtp port 587 mailServerProperties put mail smtp
  • 如何在 JFace 的 TableViewer 中创建复选框?

    我创建了一个包含两列的 tableViewer 我想将其中一列设为复选框 为此 我创建了一个 CheckBoxCellEditor 但我不知道为什么它不起作用 名为 tableName 的列显示其值正常 色谱柱规格如下 String COL
  • AES 加密 Java/plsql

    我需要在Java和plsql DBMS CRYPTO for Oracle 10g 上实现相同的加密 解密应用程序 两种实现都工作正常 但这里的问题是我对相同纯文本的加密得到了不同的输出 下面是用于加密 解密过程的代码 Java 和 PLS
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 检查 protobuf 消息 - 如何按名称获取字段值?

    我似乎无法找到一种方法来验证 protobuf 消息中字段的值 而无需显式调用其 getter 我看到周围的例子使用Descriptors FieldDescriptor实例到达消息映射内部 但它们要么基于迭代器 要么由字段号驱动 一旦我有
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • Windows 上的 Nifi 命令

    在我当前的项目中 我一直在Windows操作系统上使用apache nifi 我已经提取了nifi 0 7 0 bin zip文件输入C 现在 当我跑步时 bin run nifi bat as 管理员我在命令行上看到以下消息 但无法运行
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • 如何配置eclipse以保持这种代码格式?

    以下代码来自 playframework 2 0 的示例 Display the dashboard public static Result index return ok dashboard render Project findInv
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它

随机推荐

  • IRQ和FIQ中断的区别

    FIQ和IRQ是两种不同类型的中断 ARM为了支持这两种不同的中断 提供了对应的叫做FIQ和IRQ处理器模式 ARM有7种处理模式 一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ还是IRQ 所以一个中断是可以指定为FIQ或
  • Mac下如何降级Java、卸载Java

    前言 安装一些组件或插件时 有时会提示错误 What went wrong Could not determine java version from 11 查看组件或插件对应的Java版本会发现 可能只支持 Java 8 但本地安装的Ja
  • 《网络安全》零基础教程-适合小白科普

    网络安全 零基础教程 目录 目录 网络安全 零基础教程 第1章 网络安全基础 什么是网络安全 常见的网络安全威胁 网络安全的三个基本要素 网络安全的保障措施 第2章 网络攻击类型 病毒 蠕虫 木马 后门 DoS DDoS攻击 SQL注入 X
  • Java入门项目——读书管理系统

    Java简单实现读书管理系统 一 前言 二 思路及整体框架 三 代码展示 1 有关读书包 Book 2 有关用户包 3 有关操作书的包 一 前言 相信有很多小伙伴学习完了 JavaSE 基础语法 想知道自己到底学的怎么样 或则学完不知道这么
  • 使用RT-Thread studio 把LVGL移植到RT-Thread 上

    使用RT Thread studio 移植 LVGL到RT Thread中 其实RT Thread 移植LVGL 官方已经出来很多教程 但是但是他出的教程都是基于一些他们适配的BSP 但是其他不适配的怎么办呢 当然是手搓了 前期准备 1 在
  • 深入理解Golang之Map

    目录 写在前面 哈希表 如何解决哈希冲突的问题 1 链表地址法 2 开放地址法 开放地址 线性探测法 开放地址 平方探测法 开放地址 双哈希 Go Map实现 map数据结构 map的结构体为hmap bmap结构体 map的桶 Map扩容
  • 【使用JMeter 对Web服务器压力测试】

    自己使用JMeter测试百度心得 主要用到了 1 添加线程组 一个测试的线程容器 可设置线程个数 循环次数 所有线程启动一次的周期时间 2 在线程组 中添加sample gt http request 一个请求的范式 可以设置请求的url和
  • 关于单个模型切片

    这几天鼓捣了模型切片 遇到好多坑 特此记录 1 切片切什么 切的是模型 模型可以通过Nodevisitor转换为geode 而geode可以分为若干drawable 切的就是这些drawable 因此 要node gt accept vis
  • APP更新机制-静默更新、弱更新、强更新/portal是什么?

    APP更新机制 静默更新 弱更新 强更新 一 静默更新 1 1 功能解释 静默更新就是手机系统悄悄的更新 一般会是用户在应用市场勾选了Wifi状态下 闲时自动更新功能后 手机系统会按它的规则帮用户自动更新APP 这个功能和用户手动去应用市场
  • vue 校验表单报错:model is required for validate to wor

    参考https blog csdn net qq 45376290 article details 107346110 1 属性绑定错误 确保绑定的是 model 而不是v model model 是element ui 里面的一个 属性
  • 压缩感知 热身实验 OMP算法Python实现(详细代码注释)

    压缩感知实验 OMP算法Python实现 一维图信号重建 Experiment Result 一维图信号重建 coding utf 8 Created on Wed Sep 23 21 46 43 2020 author chen impo
  • GetLastError返回值及其含义

    GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置 函数并无必要设置上一次错误信息 所以即使一次GetLastError调用返回的是零值 也不能担保函数已成功执行 只有在函数调用
  • dhcp和vrrp技术

    目录 引言 一 DHCP工作原理与配置 1 DHCP 动态主机配置协议 2 DHCP工作原理 3 dhcp配置 同网段 4 dhcp中继 不同同网段 5 例子 二 vrrp作用配置 1 vrrp作用 2 vrrp配置 总结 引言 我们每台电
  • Android系统裁剪:手把手教你如何进行系统裁剪

    内容有点长 想系统裁剪 这篇文章足矣 看完会对系统裁剪及系统有更深的认识 前言 android系统裁剪优化一直是各个厂商定制产品的关键步骤 包括浅层次的去除不必要的apk android apk裁剪定制 和深层次的裁剪整个编译系统和框架层
  • 跨境外贸必看

    Pinterest是一个海外图片社交分享网站 Pinterest与国内小红书的营销方式非常相似 它允许我们定位特定的人群 兴趣甚至位置 借助庞大的用户群体和针对特定受众的能力 它成为外贸与跨境电商的推广营销利器 越来越多的跨境玩家利用它进行
  • 虚拟机opnsense作为dhcp服务器,在OPNsense中,通过主机名或域名访问内部设备

    在局域网环境中 使用域名来访问防火墙或其他设备比使用IP地址更容易让人使用 根据需要 我们可以只使用主机名 服务器 来访问设备上的各种服务 例如文件共享 它比包含域名的名称要短 如果打算运行Web服务器或运行具有Web界面的软件 则可能需要
  • Faster RCNN训练自己的数据集【傻瓜式教程】

    一 下载源码 本文采用的源码是 https github com dBeker Faster RCNN TensorFlow Python3 二 配置环境 由于本文是小白教程 光写几个环境怕有人配置不好或者配置版本搞乱 Faster RCN
  • ELK之Elasticsearch常用DSL语句(kibana语句)

    DSL 是什么 DSL Domain Specific Language 的缩写 中文翻译为领域特定语言 Wikipedia 对于 DSL 的定义还是比较简单的 A specialized computer language designe
  • 8.2.3-elasticsearch内置分词器之keyword/pattern

    ES默认提供了八种内置的analyzer 针对不同的场景可以使用不同的analyzer 1 keyword analyzer 1 1 keyword类型及分词效果 keyword analyzer视字符串为一个整体不进行分词处理 测试key
  • Java多线程编程基础篇(二)-多线程同步关键字

    一 多线程同步关键字 synchronized 1 概念 synchronized保证方法或者代码块在运行时 同一时刻只有一个方法可以进入到临界区 同时它还可以保证共享变量的内存可见性 当多个并发线程访问同一个对象object中的同步代码块