多线程的一点小结

最近看多线程比较多,对于volatile,syn,CAS,JMM模型(主内存,工作内存)这些概念有些理解。volatile,syn工作机制等。
以及对于多线程中可见性,原子性的理解。
随着对这些基础的掌握和理解,我觉得自己对于多线程方面的能力有一定的提升。

可见性的问题上,volatile是怎么解决可见性的。而syn又是如何解决可见性的。
对于原子性的问题上,syn又是怎么解决的。而syn是悲观锁,在处理共享数据问题的时候,效率可能比较差。因为当数据被修改的时候,其他的线程不能对数据进行读操作。
由此就引申出了CAS锁(乐观锁)这个机制。

同时,在练习的过程中,也踩了一些坑。也能够基于两种方式去实现小demo。
对于实现Runable接口来说,它适合处理共享数据,因为多个线程可以执行同一个Runable实现类中的run方法,且只有一个该实例化对象,那么它里面的属性也是唯一的。
而对于继承Thread类的方式,可以采用静态变量的方式来实现共享数据。

  • CAS锁实现逻辑:
    V内存地址 A旧值 B期望值
    线程1在修改共享变量的时候,会拿A和内存地址V上的实际值比较,如果相等,则将A修改为B。
    如果不相等,则拿地址V上的值来更新A值,然后再次修改,执行上面这个逻辑。
    — 总结:更新的时候去判断A和V上的值是否相等。在数据库的体现就是条件:where stock = A ,数据库的值就是V
    库存数量为A这个值那么就执行sql更新语句

Original: https://www.cnblogs.com/pzistart/p/16723220.html
Author: pzistart
Title: 多线程的一点小结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/616748/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 性能测试案例全过程方案八———混合场景设计(多线程组并发运行)

    JMeter压力测试(一)中设置线程组的线程数,即执行时的并发用户数,适用于单个线程组的并发测试。 如果测试需求出现如下场景,该如何使用JMeter实现压力测试呢?即JMeter如…

    Java 2023年5月30日
    0103
  • Java8Stream流

    Stream流呢,以前我也有所了解,像一些面试题中也出现过,Java8的新特性,有一块就是这个Stream操作集合,而且在看一些项目中也使用的比较多。但总感觉自己学的一知半解,所以…

    Java 2023年6月15日
    075
  • 定时调度的线程池

    定时调度线程池 当我们需要定时进行线程的调度 @Slf4j public class Test5 { public static void main(String[] args) …

    Java 2023年6月16日
    0120
  • 医疗知识图谱的构建和应用

    医疗知识图谱是实现智慧医疗的基石,有望带来更高效精准的医疗服务;然而,现有知识图谱构建技术在医学领域中普遍存在效率低、限制多、拓展性差等问题。 知识应用 1. 语义全文检索 基于知…

    Java 2023年5月29日
    062
  • 迷你版mybatis

    public class BootStrap { public static void start(){ MySqlSession sqlSession = new MySqlSe…

    Java 2023年5月30日
    064
  • SpringBoot-Mybatis

    SpringBoot 整合 Mybatis SpringBoot-Mybatis 10.1 导入 MyBatis 所需要的依赖 org.mybatis.spring.boot my…

    Java 2023年6月5日
    062
  • JavaWeb重定向及实现

    JavaWeb重定向及实现 重定向,就是将浏览器发送过来的请求有一个server转由另一个server处理。有两种实现方式,一是服务器内部进行重定向。二是将另一个server的地址…

    Java 2023年6月8日
    0107
  • Python爬虫

    1.scrapy框架有哪几个组件/模块? 2.简单说一下scrapy工作流程。 3.scrapy指纹去重原理和scrappy-redis的去重原理? 4.请简要介绍下scrapy框…

    Java 2023年6月7日
    086
  • Spring 依赖注入循环依赖问题解决

    项目中可能会出现两个service需要相互调用的情况,两个service相互调用会造成bean循环依赖,Spring在应用程序上下文启动时就会去创建所有的单例bean对象,从而导致…

    Java 2023年6月7日
    085
  • 用浏览器连接服务器-安装新的虚拟机

    (1)在浏览器上输入https://10.100.0.249/ – 登录 (2)选中”虚拟机”,右键选择”创建/注册虚拟机&#822…

    Java 2023年5月30日
    092
  • Java基础–Java语言介绍

    Java是一种半编译半解释的语言。1、编译阶段使用指令:javac这个阶段,Java编译器(也就是JVM:java虚拟机,后称JVM),首先把你的代码加载完成,然后开始检查语法。此…

    Java 2023年5月29日
    091
  • autoJS自动刷网课

    自动刷网课,autoJS代码 vscode Ctrl+shift+p打开命令行,连接手机 f5运行 1.点击当前播放器,获取当前播放总时长与播放进度 2.若当前播放进度不等于00:…

    Java 2023年6月9日
    0139
  • 三、mybatis多表关联查询和分布查询

    前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询。不过需要掌握数据输出的这方面的知识。之前整理过了mybatis入门案例和mybatis数据…

    Java 2023年6月16日
    077
  • 云管、SDN、OpenStack组成的虚拟化云计算:创建虚拟机[原创]

    虚拟机: "server": { "OS-DCF:diskConfig": "AUTO", "OS-EXT-A…

    Java 2023年5月30日
    072
  • SpringBoot笔记(二):配置文件

    虽然SpringBoot约定优于配置,但是在一些特殊情况下,我们依然需要自己定义一些配置,如数据库。下面我们就来研究下SpringBoot是如何配置的。 配置文件样式 Spring…

    Java 2023年6月7日
    073
  • 基于Redisson的延迟队列实现

    package com.dong.mytest.demo.client; import cn.hutool.extra.spring.SpringUtil; import com….

    Java 2023年6月5日
    071
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球