多线程问题,主要是多线程执行时的顺序是随机的,无法保证同一代码的执行顺序,任意两步代码(非原子)操作都存在安全问题

以下常见的线程安全问题:

1. 锁在String

String str="a";

synchronized(str)

{

str = "b";  //str变为一个新对象,锁失效,字符的赋值是新new一个String然后赋值的

}

2. i++,使用java.util.concurrent.atomic下的原子类代替来做多线程的计数器

i++是两步,读取i的变量的值,然后更新+1,所以不安全, 使用AtomicInteger

3. HashMap,ArrayList,使用ConcurrentHashMap,CopyOnWriteArrayList代替

4.StringBuilder,使用StringBuffer代替

5. spring项目中的controller,service使用属性存储( 就是使用class的private 自定义的属性,而不是在方法内,使用变量),然后在方法内对这个private属性有写操作,引发线程不安全,spring默认bean是单例,就一个。而每一个新请求来,会用一个新线程或从线程池取一个线程,来处理,当两个请求同时到达,引起并发,第一线程刚对private属性写完,第二线程就使用了这个private属性,对象或者字符串值,导致线程不安全。可以把这个private属性想象成指针,写操作就是使指针指向其他位置,读操作就是指针当前指向位置的对象来使用,这样好理解

6. Threadlocal变量,但是在线程池中使用线程。Threadlocal的生命周期,自然的,一般的是线程结束后,自动消失,但是线程池会重复利用线程,所以Threadlocal不一定消失,会一直存在,引发线程不安全,甚至引发内存泄漏,Threadlocal引用的内存一直被引用,无法被gc回收而造成oom

【总结,持续更新】java常见的线程不安全,你以为的线程安全相关推荐

  1. Java开发专家阿里P6-P7面试题大全及答案汇总(持续更新)

    一.CPU100%问题如何快速定位 答案 1.执行top -c ,显示进程运行信息列表   键入P (大写p),进程按照CPU使用率排序 2.找到最耗CPU的线程   top -Hp 10765 ,显 ...

  2. 个人所有博客分类总结(持续更新)

    个人所有博客分类总结如下(持续更新) Java: 1. 获取Class对象的三种方式 2. 创建对象的四种方式 3. java中的异常种类和区别以及处理机制和区别 4. IO流以及他们的种类区别 序列 ...

  3. 字节跳动mysql面试题_刚面完的字节跳动java研发面试题整理(含答案):线程+MySQL+Spring+JVM...

    点关注,不迷路:持续更新Java相关技术及资讯!!! 为什么要用线程池那先要明白什么是线程池 线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建 ...

  4. Java 最常见的 10000+ 面试题及答案整理:持续更新

    Java面试题以及答案整理[最新版]Java高级面试题大全(2021版),发现网上很多Java面试题都没有答案,所以花了很长时间搜集,本套Java面试题大全,汇总了大量经典的Java程序员面试题以及答 ...

  5. java程序中单方法接口通常是,Android面试题1--Java基础之线程(持续更新)

    1.实现多线程的方式 1)继承Thread类 2)实现Runnable接口 3)Java5以后可通过实现Callable接口,该接口中的call方法可以在线程执行结束时产生一个返回值,代码如下: cl ...

  6. Java面试题大全带答案110道(持续更新)

    [Java面试题大全带答案 110道(持续更新)] 本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题 ...

  7. JAVA面试大全(持续更新中...)

    本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...

  8. Java面试知识学习(持续更新)

    一.Java基础 1.java语言有什么特点 面向对象(封装,继承,多态): 平台无关性,平台无关性的具体表现在于,Java 是"一次编写,到处运行(Write Once,Run any W ...

  9. 最全java面试题整理(持续更新)

    1. springboot项目和maven项目的区别? (1)打包方式:传统项目如果需要打成war包,需要在WEB-INF目录结构配置web.xml文件:springboot则不需要 (2)项目启动方 ...

  10. 「高级java工程师」常见面试题及其答案(持续更新)

    「java工程师」常见面试题及其答案请见: 「java工程师」常见面试题及其答案(持续更新)_好人老李的博客-CSDN博客 目录 java基础 常用的 jvm 调优方法? OOM的常见场景及其原因.解 ...

最新文章

  1. Maya 2020面部绑定动画学习视频教程 Facial Rigging 101 – Maya 2020
  2. mysql数据库备份还原
  3. error: index-pack died of signal fatal: index-pack failed【Git】
  4. selenium ie 操作cookie_Python3中selenium 怎么操作Cookie?
  5. [模板]平面最近点对
  6. ant vue 语言_Ant Design Vue是什么
  7. 【JVM原理探索,Java组件化架构实践
  8. ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
  9. Linux debian live USB,用 Live Magic 制作 Debian Live 光盘
  10. 敏捷开发相关概念——学习笔记
  11. 格式化Json字符串工具-HiJson
  12. 服务器装win10系统,win10服务器系统
  13. Angular:升级Angular 13到Angular 14
  14. c31 rotc_百度百科
  15. Python房价分析和可视化<anjuke二手房>
  16. 探索式测试之隐喻(种植)
  17. Hibernate学习文章
  18. 很久未使用计算机会怎样,很久没用,电脑为什么不能启动?
  19. reactive函数实现响应式数据
  20. linux查看设备和硬盘序列号 ip mac地址

热门文章

  1. 华为手机鸿蒙系统官方下载入口,华为鸿蒙系统官方下载入口v.20
  2. Confluence7.4安装
  3. iphone win7无法识别_电脑无法识别iphone、ipad的解决办法
  4. ping www.baidu.com 不通
  5. 2019京东618活动提报要求一览
  6. i春秋首届全国数据安全大赛部分复盘
  7. surface屏幕闪烁重影_如何解决surface重影surfacepro4屏幕抖动原因
  8. Win32-API: 终于能正常的捕获焦点事件: WM_COMMAND、BN_SETFOCUS、EN_SETFOCUS
  9. Esp8266学习之旅⑧ 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。(带Demo)
  10. The following assertion was thrown building LayoutDemo(dirty): A non-null String must be provided to