【总结,持续更新】java常见的线程不安全,你以为的线程安全
多线程问题,主要是多线程执行时的顺序是随机的,无法保证同一代码的执行顺序,任意两步代码(非原子)操作都存在安全问题
以下常见的线程安全问题:
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常见的线程不安全,你以为的线程安全相关推荐
- Java开发专家阿里P6-P7面试题大全及答案汇总(持续更新)
一.CPU100%问题如何快速定位 答案 1.执行top -c ,显示进程运行信息列表 键入P (大写p),进程按照CPU使用率排序 2.找到最耗CPU的线程 top -Hp 10765 ,显 ...
- 个人所有博客分类总结(持续更新)
个人所有博客分类总结如下(持续更新) Java: 1. 获取Class对象的三种方式 2. 创建对象的四种方式 3. java中的异常种类和区别以及处理机制和区别 4. IO流以及他们的种类区别 序列 ...
- 字节跳动mysql面试题_刚面完的字节跳动java研发面试题整理(含答案):线程+MySQL+Spring+JVM...
点关注,不迷路:持续更新Java相关技术及资讯!!! 为什么要用线程池那先要明白什么是线程池 线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建 ...
- Java 最常见的 10000+ 面试题及答案整理:持续更新
Java面试题以及答案整理[最新版]Java高级面试题大全(2021版),发现网上很多Java面试题都没有答案,所以花了很长时间搜集,本套Java面试题大全,汇总了大量经典的Java程序员面试题以及答 ...
- java程序中单方法接口通常是,Android面试题1--Java基础之线程(持续更新)
1.实现多线程的方式 1)继承Thread类 2)实现Runnable接口 3)Java5以后可通过实现Callable接口,该接口中的call方法可以在线程执行结束时产生一个返回值,代码如下: cl ...
- Java面试题大全带答案110道(持续更新)
[Java面试题大全带答案 110道(持续更新)] 本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题 ...
- JAVA面试大全(持续更新中...)
本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...
- Java面试知识学习(持续更新)
一.Java基础 1.java语言有什么特点 面向对象(封装,继承,多态): 平台无关性,平台无关性的具体表现在于,Java 是"一次编写,到处运行(Write Once,Run any W ...
- 最全java面试题整理(持续更新)
1. springboot项目和maven项目的区别? (1)打包方式:传统项目如果需要打成war包,需要在WEB-INF目录结构配置web.xml文件:springboot则不需要 (2)项目启动方 ...
- 「高级java工程师」常见面试题及其答案(持续更新)
「java工程师」常见面试题及其答案请见: 「java工程师」常见面试题及其答案(持续更新)_好人老李的博客-CSDN博客 目录 java基础 常用的 jvm 调优方法? OOM的常见场景及其原因.解 ...
最新文章
- Maya 2020面部绑定动画学习视频教程 Facial Rigging 101 – Maya 2020
- mysql数据库备份还原
- error: index-pack died of signal fatal: index-pack failed【Git】
- selenium ie 操作cookie_Python3中selenium 怎么操作Cookie?
- [模板]平面最近点对
- ant vue 语言_Ant Design Vue是什么
- 【JVM原理探索,Java组件化架构实践
- ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
- Linux debian live USB,用 Live Magic 制作 Debian Live 光盘
- 敏捷开发相关概念——学习笔记
- 格式化Json字符串工具-HiJson
- 服务器装win10系统,win10服务器系统
- Angular:升级Angular 13到Angular 14
- c31 rotc_百度百科
- Python房价分析和可视化<anjuke二手房>
- 探索式测试之隐喻(种植)
- Hibernate学习文章
- 很久未使用计算机会怎样,很久没用,电脑为什么不能启动?
- reactive函数实现响应式数据
- linux查看设备和硬盘序列号 ip mac地址
热门文章
- 华为手机鸿蒙系统官方下载入口,华为鸿蒙系统官方下载入口v.20
- Confluence7.4安装
- iphone win7无法识别_电脑无法识别iphone、ipad的解决办法
- ping www.baidu.com 不通
- 2019京东618活动提报要求一览
- i春秋首届全国数据安全大赛部分复盘
- surface屏幕闪烁重影_如何解决surface重影surfacepro4屏幕抖动原因
- Win32-API: 终于能正常的捕获焦点事件: WM_COMMAND、BN_SETFOCUS、EN_SETFOCUS
- Esp8266学习之旅⑧ 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。(带Demo)
- The following assertion was thrown building LayoutDemo(dirty): A non-null String must be provided to