Java同步方法及代码块

2023-11-08

同步方法及代码块:synchronized

同步方法
  • 由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:synchronized方法和sychronized块
同步方法:public synchronized void method(int args){
   }
  • synchronized方法控制对“对象”的访问,每个对象对应一把锁,每个synchronized方法都必须获得调用该方法的对象的锁才能执行,否则线程会阻塞,方法一旦执行,就独占该锁,直到该方法返回才释放锁,后面被阻塞的线程才能获得这个锁,继续执行。
缺陷:若将一个打的方法申明为 synchronized 将会影响效率
同步块
  • 同步块:synchronized(Obj){}
  • Obj:称之为同步监视器
    • Obj可以是任何对象,但是推荐使用共享资源作为同步监视器;
    • 同步方法中无需指定同步监视器,因为同步方法的同步监视器就是this,就是这个对象本身,或者class。
  • 同步监视器的执行过程
    • 第一个线程访问,锁定同步监视器,执行其中代码;
    • 第二个线程访问,发现同步监视器被锁定,无法访问;
    • 第一个线程访问完毕,解锁同步监视器;
    • 第二个线程访问,发现同步监视器没有锁,然后锁定并访问。
不安全的买票
// 不安全的买票
// 线程不安全
public class Ticked {
   

    public static void main(String[] args) {
   
        Buy buy = new Buy();

        new Thread(buy,"云疏").start();
        new Thread(buy,"若瑄").start();
        new Thread(buy,"淼淼").start();
    }
}
public class Buy implements Runnable{
   

    private int ticketNums = 10;// 票数
    boolean flag = true;// 外部停止方法

    @Override
    public void run() {
    // 买票

        while (flag){
   
            //  模拟延时,放大问题的发生性
            try {
   
                Thread.sleep(1000);
            } catch (InterruptedException e) {
   
                e.printStackTrace();
            }
            buyTicket();
        }

    }
    
     public void buyTicket(){
    
        //  判断是否有票
        if(ticketNums <= 0){
   
            flag = false;
            return;
        
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java同步方法及代码块 的相关文章

随机推荐

  • Vue脚手架的创建步骤

    vue cli脚手架 案例一 案例二 一 脚手架简介 Vue脚手架是Vue官方提供的标准化开发工具 开发平台 它提供命令行和UI界面 方便创建vue工程 配置第三方依赖 编译vue工程 1 webpack 前端项目工程化的标志之一就是引入了
  • Robot Arm 机械臂源码解析

    Robot Arm 机械臂源码解析 说明 Robot Arm是我复刻 也是玩的第一款机械臂 用的是三自由度的结构 你可以理解为了三个电机 三轴有自己的一些缺陷 相比于六轴机械臂而言因为结构的缺陷 不能达到空间内的一些点 这些点又叫做奇异点
  • Mybatis Plus入门

    MyBatis Plus介绍 MyBatis Plus 简称MP 是国内人员开发的 MyBatis 增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效率而生 特征 无侵入 Mybatis Plus 在 Mybatis
  • 过年不再被逼相亲——我用python给亲戚展示2022的相亲数据

    人生苦短 我用Python 这不是快过年了吗 又到了一年一度的亲戚大考验环节 没对象的他们会问你 找对象了吗 你要是学计算机专业的 他们会问你 会修电脑吗 出去学了点啥他们也会要求 才艺展示一下 我相信大家都躲不过去 既然躲不过去 那直接上
  • 主力吸筹猛攻指标源码_成功率90%以上【主力吸筹+买点提示+使用方法】通达信指标公式源码...

    成功率 90 以上 主力吸筹 买点提示 使用方法 使用方法 当指标出现红绿柱时就要开始关注 未来几天如果紫线上穿黄线 即是买点 紫 线穿过黄线的当天即可买入 此指标成功率极高 90 COLORBLUE VAR1 REF LOW OPEN C
  • 第6章 计算机的运算方法

    6 1无符号数和有符号数 6 1 1无符号数 寄存器位数反映无符号数的表示范围 6 1 2有符号数 1 机器数与真值 真值 带符号的数 机器数 符号数字化的数 2 原码表示法 整数 x 原是n 1位 用逗号将符号位和数值部分分隔开 小数 用
  • 6s微信连接不上服务器失败是什么原因,6s手机微信打不开怎么回事

    很多使用6s手机的用户反应 微信打不开一直显示正在载入怎么办 下面由学习啦小编为你整理了6s手机微信打不开怎么回事的相关方法 希望对你有帮助 6s手机微信打不开解决方法 如图所示 右下角的微信变成这样子 下方显示 正在载入 无法打开 我们首
  • Docker 安装 Nginx

    拉取镜像 docker pull nginx 启动测试 docker run d p 80 80 nginx p 80 80 端口进行映射 将本地 80 端口映射到容器内部的 80 端口 d nginx 设置容器在在后台一直运行 访问主机
  • c++ set容器

    容器分类 1 顺序容器 2 关联容器 3 无序 散列 容器 vector 向量 连续存储的元素 list 链表 由节点组成的双向链表 每个节点包含着一个元素 forward list 单向链表 deque 双队列 由连续存储的指向不同元素的
  • Qt: multiple definition of XXX

    使用Qt编译源文件时出现很多multiple definition of XXX的报错 可能原因是在多次包含global h时重复定义了变量和函数 但检查过代码后 发现并不存在重复定义的变量和函数 这时 只需要清除项目编译 o文件 重新构建
  • 【云原生之Docker实战】使用docker部署家庭DOS游戏服务器

    云原生之Docker实战 使用docker部署家庭DOS游戏服务器 一 DOS游戏网页版介绍 二 检查宿主机系统版本 三 检查本地docker环境 1 检查docker服务状态 2 检查docker版本 四 下载oldiy dosgame
  • C语言入门(基础二)

    延续上作 本篇博客带大家继续入门C语言 运算符 C语言三大结构 顺序结构 选择结构 循环语句 运算符 C语言为我们提供了很多的运算符 有单目运算符 双目运算符和三目运算符 这里的一目二目三目指的是操作的对象个数 我们可以使用这些运算符来解决
  • Kotlin 编程实战

    code小生 一个专注大前端领域的技术平台 公众号回复Android加入安卓技术群 导读 Kotlin诞生于2011年 开源于2012年 吸收了Java等语言的优良特性 提供了令人惊艳的编程体验 是编程语言界名副其实的 后浪 欢迎来到Kot
  • TypeError: load_state_dict() missing 1 required positional argument: ‘state_dict‘

    记录最近遇到的小bug 希望能够帮助到和我有类似错误的你 1 TypeError parameters missing 1 required positional argument self 这里是用如下的方法查看model的参数量 n p
  • [工业互联-10]:PLC入门简介

    目录 前言 PLC的用途 PLC的特点 PLC的分类 1 按PLC的控制规模分类 2 按PLC的控制性能分类 3 按PLC的结构分类 PLC的技术指标 1 硬件指标 2 软件指标 3 主要性能指标介绍 1 存储容量 2 输入 输出 I O
  • 在线观看北京奥运会直播 在网上看奥运会直播

    2008年北京奥运会开幕明天就来了 本次奥运会的赛事大多是在白天进行的 虽然CCTV拿出7个频道为本次奥运直播 但是对于大多数上班族 白天的 上班时间通过电视来看奥运直播是不太可能的 还好现在有网络直播 只要可以上网 就可以第一时间在线观看
  • gym102263 problem J Thanos Power (dp)

    链接 题意 给出一个大数 有两种操作 加 1 0 x 10 x 10x和减 1 0
  • Ceph中一些PG相关的状态说明和基本概念说明、故障模拟

    Ceph中一些PG相关的状态说明和基本概念说明 最近公司有个Ceph集群出了点问题 于是也参与了修复的过程 过程中最让人头疼的就是一堆不明所以的状态了 所以看了看文档 也找了一些参考 整理了一下Ceph PG的一些状态以及相关的概念说明 做
  • 图片特征提取整理(持续更新....)

    这篇文章写的比较匆忙 还有很多算法没有写进去 而且也有很多算法没有写完整 大家可以先看看我下面放的参考文献 也可以先收藏我的文章 我在后续的学习中还会更新完善这篇文章 谢谢大家的支持 目录 Harris角点检测原理详解 1 算法基本思想 2
  • Java同步方法及代码块

    同步方法及代码块 synchronized 同步方法 由于我们可以通过private关键字来保证数据对象只能被方法访问 所以我们只需要针对方法提出一套机制 这套机制就是synchronized关键字 它包括两种用法 synchronized