JUC并发编程-第二天:线程高级部分

线程高级部分

    • 线程不安全
    • 原子性
    • 可见性
    • 有序性(指令重排)

线程不安全

多线程下并发同时对共享数据进行读写,会造成数据混乱=线程不安全

当多线程下并发访问临界资源时,如果破坏其原子性、可见性、有序性,可能会造成数据不一致。

原子性

原子性操作指相应的操作是 单一不可分割的操作。

可见性

指当多个线程访问同一个资源时,一个线程修改了资源,其他线程能够立即看到修改的值

  • 比如下面的代码就违反了可见性
public class ThreadPool {static boolean alwasy=true;public static void main(String[] args) throws ExecutionException, InterruptedException {new Thread(()->{while (alwasy){}}).start();Thread.sleep(2000);alwasy=false;}
}

原因:两个线程共享主内存变量,复制了两份副本,我们改变的只是主线程的变量 另外一个线程的没有改过来。主内存改了后并不会同步到主内存中。
在这里插入图片描述

  • 解决方法:使用synchronized ,synchronized 在解锁之前会将变量同步到主内存中
public class ThreadPool {static Boolean alwasy=true;public static void main(String[] args) throws ExecutionException, InterruptedException {new Thread(()->{while (alwasy){synchronized (alwasy){}}}).start();Thread.sleep(2000);alwasy=false;}
}

对一个变量解锁之前,必须先把此变量同步回主内存中,这样解锁后,线程就可以访问被修改后的值
所以synchronized 锁住的对象,其值具有可见性

  • 非常重要
    使用 System.out.println();也可以的,因为System.out.println();里面也实现了synchronized 锁
    在这里插入图片描述
    synchronized的锁,任意一个被锁住的对象,只要锁释放了,就会把工作内存中变量同步到主内存
public class ThreadPool {static Boolean alwasy=true;public static void main(String[] args) throws ExecutionException, InterruptedException {new Thread(()->{while (alwasy){//这个也可以System.out.println();}}).start();Thread.sleep(2000);alwasy=false;}
}

有序性(指令重排)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/30777.shtml

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

相关文章

JavaEE多线程(2)

文章目录 1..多线程的安全1.1出现多线程不安全的原因1.2解决多线程不安全的⽅法1.3三种典型死锁场景1.4如何避免死锁问题2.线程等待通知机制2.1等待通知的作用2.2等待通知的方法——wait2.3唤醒wait的方法——notify 1…多线程的安全 1.1出现多线程不安全的原因 线程在系统中…

前端练习小项目——视觉冲击卡片

前言: 前言:在学习完HTML和CSS之后,我们就可以开始做一些小项目了,本篇文章所讲的小项目为——视觉冲击卡片 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下效果&a…

maxKb+ollama+lama2-chinese 基于知识库+本地模型的知识问答系统

maxKbollamalama2-chinese 基于知识库本地模型的知识问答系统 搭建步骤 搭建maxKb docker run -d --namemaxkb -p 8080:8080 -v ~/.maxkb:/var/lib/postgresql/data cr2.fit2cloud.com/1panel/maxkb# 用户名: admin # 密码: MaxKB123..github的访问地址:https://…

Vant2组件库的基础应用

目录 一、Picker 选择器 1.1、数组对象处理 1.2、每个选项颜色设置 二、滚动分页加载列表 三、Calendar 日历(可选范围限制) 四、input值过滤 官网:Vant 2 - Mobile UI Components built on Vue 一、Picker 选择器 官网示例数据: columns: [杭州…

计算机网络实验之单交换机互联终端实验

1.网线 4对,8根,RJ-45连接器(水晶头); (1)直通线 双绞线缆两端按照EIA/TIA568B规格连接水晶头,该双绞线为直通线。 橘白1,橘2,绿白3,蓝4&#…

WPF学习(2)--类与类的继承2-在窗口的实现

一、代码分析 1.Animal.cs 1.1 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace AnimalNamespace {public class Animal{public string Name { get; set; }public int Age { get; set…

RabbitMQ的简单使用 —— Python篇

(一)RabbitMQ的简介 RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完…

JavaWeb项目配置教程

将你的项目(只有代码的文件,不是整个文件)拖入idea 找到数据库配置代码(一般在Util包里面,或者是properties配置文件)并将密码修改为你的数据库密码。 点击Edit Configurations 点击Configure&#xff0…

SOLIDWORKS安装运行环境建议 慧德敏学

SOLIDWORKS是一款要求很高的软件。无可否认。您的电脑功能越强大,运行得越好,但是我们也要考虑购买成本,因此,选择正确的配置很重要。在选择用于SOLIDWORKS的电脑配置时,需要综合考虑多个方面以确保软件能够流畅、以更…

Hi3861 OpenHarmony嵌入式应用入门--PWM 三色灯

这篇文章是讲解的pwm控制三色灯的部分,这部分也是后续全彩智能灯的基础。 硬件原理如下 IO管脚定义在hi-12f_v1.1.2-规格书-20211202.pdf文档中 GPIO API API名称 说明 unsigned int IoTGpioInit(unsigned int id); GPIO模块初始化 hi_u32 hi_io_set_func(hi_i…

无引擎游戏开发(2):最简游戏框架 | EasyX制作井字棋小游戏I

一、EasyX中的坐标系 不同于数理中的坐标系,EasyX中的y轴是竖直向下的 二、渲染缓冲区 之前的程序添加了这三个函数改善了绘图时闪烁的情况: 小球在"画布“上移动的过程就是我们在调用绘图函数,这个”画布“就是渲染缓冲区,先绘制的内…

【配置】Notion自动化备份到github方案

步骤 打开notion网页,获取到需要的值 token_v2 找到请求getSpaces的 Cookie 值 token_v2 space_id 找到请求getSpaces的响应结果space,如下图: file_token 找个页面点击导出,之后拿到这个配置项 注意:配置项会过期&#xff0c…

基于一种改进熵方法的旋转机械故障诊断模型(MATLAB)

熵的概念起源于热力学,1884年,玻尔兹曼定义熵,用以描述分子热运动的无序性和混乱度。1948年,Shannon在其发表的《AMathematicalTheoryofCommunication》中提出香农熵,首次将“熵”引入信息度量范畴,为信息论…

RK3568技术笔记十三 Ubuntu的编译

Ubuntu文件系统编译 在编译前需要按照前面的方法初始化编译环境,否则会导致编译失败(若配置过则无需重复配置)。 按下述方法编译的Ubuntu系统,用户名是:dianyu 密码:1 编译Ubuntu,执…

机械臂 CoppeliaSim Simulink联合仿真

实现机械臂在CoppeliaSim(以前称为V-REP)和Simulink上的联合仿真涉及多个步骤,包括环境设置、模型导入、通信配置、控制算法设计和测试调试。 前期准备 安装软件配置工作环境创建和配置CoppeliaSim场景 导入机械臂模型配置机械臂参数在Simuli…

webp图片格式怎么转换成jpg?值得收藏的四种转换方法介绍!

webp图片格式怎么转换成jpg?在当今数字图像处理领域,新兴的WebP格式以其独特的特性和兼容性,迅速成为备受追捧的图像格式之一,这一格式以其高效的压缩能力和优秀的网络传输速度著称,为网络图像的传输和存储提供了全新的…

一种稀疏贝叶斯学习的旋转机械故障诊断方法(MATLAB)

轴承的故障诊断技术是通过检测轴承故障特征信息来判断轴承的具体故障为位置或损伤程度。在轴承发生损坏时,故障特征信息会随着工作时间的增长变得明显。轴承的损坏过程可以分为四个阶段。第一个阶段为损伤初始阶段,轴承故障特征信号一般无法测量。第二个…

基于SSM+Jsp的书店仓库管理系统

摘要:仓库作为储存货物的核心功能之一,在整个仓储中具有非常重要的作用,是社会物质生产的必要条件。良好的仓库布局环境能够对货物进入下一个环节前的质量起保证作用,能够为货物进入市场作好准备,在设计中我们根据书店…

【人工智能】音乐大模型的深入探讨——当机器有了创意,是机遇还是灾难?

👀国内外音乐大模型基本情况👀 ♥概述♥ ✈✈✈如FreeCompose、一术科技等,这些企业专注于开发人工智能驱动的语音、音效和音乐生成工具,致力于利用核心技术驱动文化产业升级。虽然具体公司未明确提及,但可以预见的是…

产业园区空间优化设计的创新实践者

树莓集团在产业园区运营中的空间优化设计方面,通过全面规划与科学布局、绿色智能与可持续发展、个性化定制与灵活多变、创新实践与数字化升级等措施,为企业提供了高品质、高效率的空间环境和服务支持。 一、全面规划与科学布局 明确产业定位&#xff1a…