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.hqwc.cn/news/235263.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开关电源工作时,如何抑制纹波和减小高频噪声?

开关电源的纹波和噪声是一个本质问题,换而言之无论纹波和噪声多么小,也无法从根本上去除,再绝对的讲开关电源无论成本怎么提高,也无法完全达到线性电源的性能和特点。那么,通常抑制或减少它的做法有五种: …

【驱动】串口驱动分析(二)-tty core

前言 tty这个名称源于电传打字节的简称,在linux表示各种终端,终端通常都跟硬件相对应。比如对应于输入设备键盘鼠标,输出设备显示器的控制终端和串口终端。也有对应于不存在设备的pty驱动。在如此众多的终端模型之中,linux是怎么…

如何创建曼达洛人风格的照片效果

如何把一个普通的头盔变成一个以曼达洛人为灵感的头盔;如何使用一个场景创建戏剧性的天空效果 1. 如何在 Photoshop 中创建戏剧性的天空 步骤 1 我们将从拼凑我们的天空开始,专注于创造日落和繁星点点的夜空的完美融合。我将使用这张照片作为基地。 步…

自定义链 SNAT / DNAT 实验举例

参考原理图 实验前的环境搭建 1. 准备三台虚拟机,定义为内网,外网以及网卡服务器 2. 给网卡服务器添加网卡 3. 将三台虚拟机的防火墙和安全终端全部关掉 systemctl stop firewalld && setenforce 0 4. 给内网虚拟机和外网虚拟机 yum安装 httpd…

C++ 学习之函数成员指针的一个小细节

看看下面的代码,你能看出错误吗 class A { public:void fun(){}}; int main() {A a;void (A:: * p)() &A::fun;(*p)(); } 这段代码在调用成员函数时存在问题。正确的方式是使用对象来调用成员函数,而不是通过指针。以下是修正后的代码&#xff1a…

中国毫米波雷达产业分析4——毫米波雷达企业介绍

一、矽典微 (一)公司简介 矽典微致力于实现射频技术的智能化,专注于研发高性能无线技术相关芯片,产品广泛适用于毫米波传感器、下一代移动通信、卫星通信等无线领域。 整合自身在芯片、系统、软件、算法等领域的专业能力&#xf…

计算机组成原理期中题库

计算机组成原理题目集 2.1 下面是关于计算机中存储器容量单位的叙述,其中错误的是 A. 最基本的计量单位是字节(Byte),一个字节等于8bit B. 一台计算机的编址单位、指令字长和数据字长都一样,且是字节的整数倍 C. 最小…

python中的字符串

字符串 字符串是编程语言中的一种基本数据类型,用于表示一串字符序列。在Python中,字符串是不可变的,也就是说一旦字符串被创建,就无法修改其中的字符。 Python中的字符串可以用单引号或双引号括起来,例如&#xff1…

【模电】基本共射放大电路的组成及各元件的作用

基本共射放大电路的组成及各元件的作用 下图所示为基本共射放大电路,晶体管是起放大作用的核心元件。输入信号 U ˉ i Ū\tiny i Uˉi 为正弦波电压。   当 u i 0 {u\tiny i}0 ui0时,称放大电路处于静态。在输入回路中,基极电源 V B B V\t…

解决keil右键Go To Definition跳转不过去的问题

解决: 在魔法棒中如图所示打上√

app广告变现如何提高变现收益?提高广告点击率

在广告变现实践过程中,我们往往会遇到一些问题,比如广告的填充不够、eCPM太低,该展示的广告没有展示出来,又或者广告位选择不合理导致用户负面反馈变多,这些种种问题都会影响我们的广告变现效率。 广告三大要素&#…

【每日一坑】KiCAD导Gerber 文件

第一,软件版本 第二、操作选择注意点 第三步,那个坑。。。 不知道什么原因,这第二个框里会选其他不必要得一些东西,导致最终光绘是废的; 一定切记只选edge.cut就好了。 最后,上Gerber图,还有一…