当前位置: 首页 > news >正文

JAVEE初阶 多线程基础(四)

线程安全

    • 一.线程安全存在的问题
    • 二.锁
    • 三.关于锁的理解
    • 四.关于锁操作混淆的理解
      • 4.1两个线程是否对同一对象加锁

一.线程安全存在的问题

在这里插入图片描述
在这里插入图片描述

为什么这里的count不是一百万呢?这就是线程所存在的不安全的问题,由于线程是抢占式执行,同时执行count++,操作本质是三个指令
1.load 读取内存上的值到寄存器中
2.add 寄存器上的值+1
3.save 将寄存器上的值放回到内存中

线程不安全的原因小结:
1.根本原因:线程的随机调度,抢占式执行
2.代码中多个线程,同时修改一个变量
3.多线程修改操作,本身不是"原子的".
4.内存可见性问题
5.指令重排序问题
我们可以通过加锁操作来解决线程不安全的问题

二.锁

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

t1执行lock的时候,就对t1这个线程加锁成功,而t2后执行lock的时候,由于已经加上锁,所以它会进入长时间的阻塞状态,一直阻塞到t1线程unlock之后,才能获取到锁.

三.关于锁的理解

(1) 一个线程加锁,一个线程不加锁,是不是会出现线程安全问题?

答案当然是会出现线程安全问题,因为一个加锁,一个不加锁,不会出现锁竞争,就会出现线程安全问题

(2) 两个线程对不同的对象加锁,会不会出现线程安全问题?

当然也会出现线程安全问题.锁竞争不会出现.

在这里插入图片描述
在这里插入图片描述

四.关于锁操作混淆的理解

4.1两个线程是否对同一对象加锁

在这里插入图片描述
在这里插入图片描述

类名.class意思就是类对象,它可以得知类中的属性,名字,参数,访问权限修饰符,继承自哪个类,实现了什么接口.

在这里插入图片描述
在这里插入图片描述

锁里面传参数是this 就可以等价位 在方法的前面写锁
锁里面传参数是类对象,就相当于锁加上一个静态方法

http://www.lryc.cn/news/249610.html

相关文章:

  • 【C 语言经典100例】C 练习实例19
  • Jmeter+Maven+jenkins+eclipse搭建自动化测试平台
  • springboot+jsp+java人才招聘网站4f21r
  • WordPress:构建强大的网站和博客的完美选择
  • 2021年8月18日 Go生态洞察:整合Go的网络体验
  • 【算法】缓存淘汰算法
  • 接手项目要做的事项
  • 【Web】攻防世界Web_php_wrong_nginx_config
  • Flume采集Kafka并把数据sink到OSS
  • flutter,uni-app开发调试ios
  • MybatisBatchUtils功能介绍
  • Flutter使用flutter_gen管理资源文件
  • vue3 setup语法糖,常用的几个:defineProps、defineEmits、defineExpose、
  • JC/T 2087-2011建筑装饰用仿自然面艺术石检测
  • C语言——写一个简单函数,找两个数中最大者
  • 机器学习中的混淆矩阵
  • QT基础实践之简易计算器
  • 南大通用 GBase 8s数据库级别权限
  • 对话式数据需求激增,景联文科技提供高质量多轮对话数据定制采集标注服务
  • python第1天之常识及环境安装
  • 中国高纯石英砂行业市场研究与投资前景报告(2024版)
  • 遭到美国做空机构“灰熊”做空后,人工智能公司商汤科技股价暴跌
  • 异常数据检测 | Python实现孤立森林(IsolationForest)异常检测
  • 营销互动类小游戏策划与开发
  • 主机的容器化技术介绍
  • 网络基础『发展 ‖ 协议 ‖ 传输 ‖ 地址』
  • Aapche Dubbo 不安全的 Java 反序列化 (CVE-2019-17564)
  • B/S软件开发架构
  • 【docker系列】docker实战之部署SpringBoot项目
  • 【数据结构】时间和空间复杂度