核心思想:上锁 分布式锁

在同一个jvm中,多个线程需要竞争锁的资源,最终只能够有一个线程
能够获取到锁,多个线程同时抢同一把锁,谁(线程)能够获取到锁,
谁就可以执行到该代码,如果没有获取锁成功 中间需要经历锁的升级过程
如果一致没有获取到锁则会一直阻塞等待。
如果线程A获取锁成功 但是线程A一直不释放锁
线程B一直获取不到锁,则会一直阻塞等待。

代码从那一块需要上锁?-----可能会发生线程安全性问题的代码需要上锁。
Juc并发编程 锁 重入锁 悲观锁 乐观锁 公平锁 非公平锁

线程0 线程1 同时获取 this锁,假设线程0 获取到this ,意味着线程1没有获取到锁
则会阻塞等待。等我们线程0 执行完count-- 释放锁之后 就会唤醒 线程1从新进入
到获取锁的资源。

获取锁与释放锁 全部都是有底层虚拟机实现好了。

对一块代码加锁缺点:
可能会影响到程序的执行效率。

如果是同一把锁 在多线程的情况下 最终只能够给一个线程使用。
如果有线程持有了该锁 意味着其他的线程 不能够在继续获取锁

核心思想:当多个线程共享同一个全局变量时,将可能会发生线程安全的代码
上锁,保证只有拿到锁的线程才可以执行,没有拿到锁的线程不可以执行,需要阻塞等待。

  1. 使用synchronized锁,JDK1.6开始 锁的升级过程 juc 18-25
  2. 使用Lock锁 ,需要自己实现锁的升级过程。底层是基于aqs实现
  3. 使用Threadlocal,需要注意内存泄漏的问题。
  4. 原子类 CAS 非阻塞式

如何解决线程安全的问题相关推荐

  1. 线程、线程匿名内部类、解决线程不安全的方式

    线程 线程:正在运行的程序,是程序的执行路径:多线性 进程:是应用程序的载体,程序运行在虚拟机中.一个应用软件对应一个进程. 一个进程包含多个线程,一个线程对应一个进程. 好处:提高软件的运行效率 多 ...

  2. 【解决线程安全问题:通过Lock锁对象】

    [解决线程安全问题:通过Lock锁对象] 参考文章: (1)[解决线程安全问题:通过Lock锁对象] (2)https://www.cnblogs.com/zuixinxian/p/9570409.h ...

  3. 【Java 并发编程】线程操作原子性问题 ( 问题业务场景分析 | 使用 synchronized 解决线程原子性问题 )

    文章目录 总结 一.原子性问题示例 二.线程操作原子性问题分析 三.使用 synchronized 解决线程原子性问题 总结 原子操作问题 : 线程中 , 对变量副本 count 进行自增操作 , 不 ...

  4. 同步代码块解决线程安全

    案例:需求现在有100张火车票,有两个窗口同时抢火车票,请使用多线程模拟抢票效果. 代码: package com.learn;class ThreadDemo01 implements Runnab ...

  5. java 多线程跑数据_java——多线程的实现方式、三种办法解决线程赛跑、多线程数据同步(synchronized)、死锁...

    多线程的实现方式:demo1.demo2 demo1:继承Thread类,重写run()方法 packagethread_test;public class ThreadDemo1 extendsTh ...

  6. int linux 原子操作_linux c++编程之多线程:原子操作如何解决线程冲突

    在多线程中操作全局变量一般都会引起线程冲突,为了解决线程冲突,引入原子操作. 1.线程冲突 #include #include #include #include int g_count = 0;vo ...

  7. 如何解决线程安全问题?有几种方式?synchronized与lock有什么异同?

    1.谈谈你对同步代码块中同步监视器和共享数据的理解以及各自要求? 同步监视器:俗称锁.①任何一个类的对象都可以充当:②多个线程共用同一把锁. 共享数据:多个线程共同操作的数据. 2.什么情况会产生线程 ...

  8. 使用同步机制解决线程安全问题

    线程的生命周期: 什么情况会产生线程安全问题? 当多个线程同时共享同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,即产生线程安全问题.读的操作不会发生线程安全问题. 例子:上文中的卖票 ...

  9. java并发之如何解决线程安全问题

    java并发之如何解决线程安全问题 参考文章: (1)java并发之如何解决线程安全问题 (2)https://www.cnblogs.com/w2154/p/6637717.html 备忘一下.

  10. 什么是线程安全问题 及怎么解决线程安全问题

    1.什么是线程安全问题 就是 多线程环境中 , 且存在数据共享 , 一个线程访问的共享 数据被其他线程修改了, 那么就发生了线程安全问题 , 整个访问过程中 , 无一共享的数据被其他线程修改了 就是线 ...

最新文章

  1. 15 分钟带你入门 sklearn 与机器学习(分类算法篇)
  2. 显示内容长时,显示部分内容,鼠标移入显示全部内容
  3. sqlite to mysql_SqliteToMysql
  4. WPF基础知识学习笔记(一)XAML基础
  5. 安卓php推送消息机制,深入剖析Android消息机制原理
  6. Android 系统(74)--Android重启原因分析
  7. Spring启动的流程
  8. 视频编解码(十三):list_for_each_entry列表总结
  9. Oracle结构化查询语言(Structured Query Language)
  10. 钉钉小程序内嵌web网页
  11. 好好说话之hijack GOT
  12. 手机插了sd卡显示无服务器,手机sd卡无法读取之sd卡无文件系统或文件系统不受支持怎么办...
  13. 123457123457#0#-----com.yuming.TruckCarRun01--前拼后广--大卡车游戏cym
  14. 最新android版本叫什么,Android版本今年将大更新,迈入10.0时代,新特性曝光
  15. VUE 当前页获取来源路由地址
  16. 女星长发如雪 上演现代版白发魔女传(组图)
  17. mysql性能问题小解 Converting HEAP to MyIsam create_myisa
  18. [转]Windows IIS WEB服务器配置安全规范
  19. 相关分析-5种常用相关分析方法
  20. php自定义微博尾巴,怎么自定义微博小尾巴 (无需工具)

热门文章

  1. 3. Leetcode 16. 最接近的三数之和 (数组-双向双指针)
  2. 论文笔记:Forecasting at Scale(Prophet)
  3. MySQL从入门到精通50讲(十)-MySQL中null值如何处理
  4. SVM -支持向量机原理详解与实践之五
  5. numpy.copy详解
  6. [特征工程系列一] 论特征的重要性
  7. 第二章 数据类型和文件操作
  8. java如何实现python的urllib.quote(str,safe='/')
  9. 有赞客户行为收集与实时处理系统设计
  10. Reactor by Example--转