线程安全:同步代码块

2023-11-12

一、线程安全

如果多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程的结果一样的,而且其他的变量的值和预期的是一样的,就是线程安全的。

public class Ticker implements Runnable{
    private int ticket=100;
    public void run(){
        //获取当前程序执行所属的线程  的名称
        String threadName=Thread.currentThread().getName();

        while(true){
            if(ticket>0){
                System.out.println(threadName+"正在销售第"+ticket);
                //有票  可以卖
                //使用sleep模拟一下出票时间
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                ticket--;
            }else{
                break;
            }
        }
    }
}

 

为了保证每个线程正常执行原子操作,有三种同步的方法

1.同步代码块

synchronized关键字可以用于方法中的某个区块中,表示只对这个区块的资源实施互斥访问

synchronized (同步锁){
            需要同步的操作的代码
        }

同步锁:

对象的同步锁只是一个概念,可以想象对方为在对象上标记了一个锁。

1.锁对象:可以是任意类型

2.多个线程对象,要使用同一把锁。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程安全:同步代码块 的相关文章

随机推荐

  • 【PCIe 5.0 - 8】PCIe 事务层详解4 - First/Last DW Byte Enables规则

    First Last DW Byte Enables规则 Byte Enables包含在Memory I O 和Configuration Requests中 本节定义了相应的规则 Byte Enables出现在Request header
  • IDE /字符串 /字符编码与文本文件(如cpp源代码文件)

    文章目录 概述 文本编辑器如何识别文件的编码格式 优先推测使用了UTF 8编码 字符编码的BOM字节序标记 重分析各文本编辑器下的测试效果 Qt Creator的文本编辑器 系统记事本 VS的文本编辑器 Notepad 编译器与代码文件的字
  • Python实现十进制小数转IEEE754单精度浮点数转换

    def ConvertFixedIntegerToComplement fixedInterger 浮点数整数部分转换成补码 整数全部为正 return bin fixedInterger 2 def ConvertFixedDecimal
  • VUE自定义指令directive和inserted

    VUE自定义指令directive和inserted 1 什么事自定义指令 1 2使用自定义指令的方式 2 设置自定义组件 2 1 设置全局指令 2 2 设置私有指令 2 3 钩子函数 3 案例 1 什么事自定义指令 指令 Directiv
  • Java实现给图片局部打马赛克

    因为项目需要用到给图片打码的功能 本身实现也不是很复杂 就没有借鉴其他类库 参照网上的一些资料实现了一个简单的给图片局部打码的功能 也可以给一个图片的多个局部进行打码 ImageArea java package com test 图片区域
  • hdfs写数据流程

    上面图看不懂没关系 下面我有简单语言说明下其过程 现在客户端要上传一个300M的文件 1客户端先请求namenode 告诉namenode我有上传一个叫作cls 初解禁的文件 2namenode检查元数据中是否有这个文件 有就告诉客户端这个
  • 量子遗传算法原理与MATLAB仿真程序

    写在前面 1 其实这些智能算法的思想都差不多 只不过是各自搜寻方式 编码方式 种群更新方式等不一样而已 量子遗传算法是在遗传算法的基础上使用了一种新的编码方式 2 直接看前面介绍可能会觉得较难 先浏览概念任何根据案例走一遍就明白了 3 遗传
  • 阿里巴巴Java开发手册(详尽PDF版).

    前言 不知不觉间 2022 年已经过了一半了 作为技术圈中你 准备好迎接最新的变化了吗 在本文中 我们将以编程界最常用的编程语言 Java 为例 分享最为主流的技术与工具 目录 一 编程规约 一 命名风格 二 常量定义 三 代码格式 四 0
  • MDK中undefined常见错误警告解决

    c文件中包含 h文件 添加 h文件和 c文件路径 同名 h文件是否存在重复 加入 ifndef后不易找出该错误 一般在库搬移中会出现该错误 可以通过在工程文件下搜索该 h c文件查看是否有同名存在 这点很重要 有时候编译不过卡了半天就在这个
  • 嵌入式系统的通讯协议:I2C通讯、SPI通讯、USB通讯、SDIO 通讯、I2S通讯、PCI通讯简介

    本文简单的描述了在实际应用中会碰到的一些总线协议 让各位读者对实际系统中的总线有个概念上的理解 一 I2C I2C Inter Integrated Circuit 总线是一种由PHILIPS公司开发的两线式串行总线 用于连接微控制器及其外
  • Chrome 69 域名不显示 www 的解决办法

    Chrome 69 域名不显示 www 的解决办法 复制以下内容到 Chrome 地址栏 选择 Disabled 即可 chrome flags omnibox ui hide steady state url scheme and sub
  • 【Shell牛客刷题系列】SHELL25 nginx日志分析3-统计访问3次以上的IP

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Shell 欢迎关注专栏 本文知识预告 本文首先复习了grep awk sed cut等命
  • CSS3学习笔记(1)

    1 什么是CSS 样式表定义如何显示 HTML 元素 就像 HTML 中的字体标签和颜色属性所起的作用那样 样式通常保存在外部的 css 文件中 我们只需要编辑一个简单的 CSS 文档就可以改变所有页面的布局和外观 2 CSS规则 CSS声
  • 打印1000到2000之间的闰年,并统计闰年的次数。 (C语言)

    分析 判断是否为闰年条件为以下 1 能被4整除并且不能被100整除的是闰年 2 能被400整除的是闰年 代码 include
  • 重写(覆盖)和重载的区别

    牛客网题 下列对函数double add int a int b 进行重载 正确的是 int add int a int b int c int add double a double b double add double a doubl
  • 设置固定ip地址bat文件_iPad/iPhone通过smb与Windows互传文件

    更新 前段时间我的iPhone iPad莫名其妙连不上了 今天又仔细检查了一下 发现是因为电脑的IPv4地址自己变了 原本是192 168 0 104 现在变成了192 168 0 101 也就是smb 之后要输入的地址 查这个地址的方法是
  • stop带有临时表的slave步骤

    author skate time 2014 06 30 stop带有临时表的slave步骤 在stop slave之前一定要确定变量 Slave open temp tables 为0 如果在不为0时 停止了slave server或sl
  • 不要再在以太坊和Metamask开发web时使用密码

    我在ConsenSys为各种客户构建了大量的概念证明 通常他们想要利用以太坊区块链来解决某些业务用例 奇怪的是 这些系统通常设计有标准的网络登录 即用户名和密码 我总是问自己为什么我还在这样做设计 毕竟 这是今天以太网目前可以解决每个烦人的
  • QT学习——Qt工具介绍,Qt助手使用,第一个Qt程序,Qt字符串和字符编码

    一 Qt主要工具介绍 1 qt助手 assistant 2 qt构建器 qmake 3 qt设计师 designer 4 qt转换器 uic 5 qt资源编译器 rcc 6 qt元对象编译器 moc 处理语法扩展 7 qt创造器IDE qt
  • 线程安全:同步代码块

    一 线程安全 如果多个线程在同时运行 而这些线程可能会同时运行这段代码 程序每次运行结果和单线程的结果一样的 而且其他的变量的值和预期的是一样的 就是线程安全的 public class Ticker implements Runnable