Java 并发之线程安全
来源:互联网 发布:unity3d教程我要自学网 编辑:程序博客网 时间:2024/06/05 23:59
写线程安全的代码,说白了就是管理一个类的共享的、可变的状态。只要有多于 1 个线程对类的状态进行写入,那么就必须用同步来协调这多个线程对状态的访问。对于一个没有状态的类来说(简单的理解就是只有方法没有成员变量,不储存值),它永远都是安全的。而对于有状态的类来说,就要保持其原子性来保证安全。
在多线程环境下,一种可能的风险就是 check-then-act (竞争条件的一种),就是 check 的时候条件满足,然后系统状态被别的线程改变了,这时候当前线程不知道 then act, 然后错了。比如用 lazy initialization 就可能出现这种状况,为了避免这种情况,可以把成员变量使用 java.util.concurrent.atomic 包中的原子变量,但是对于包中没有的原子类型,这时候可以考虑对程序加锁。
Java 的 Synchronized 块是强制原子性的内部锁,是一种互斥锁。Synchronized 块包括 锁 和代码块两个部分,大概长这样:
synchronized(lock) { // 代码块}
内部锁是可重入的(Reentrancy), 意思就是,同一个线程可以获取它自己占有的锁,而其他的线程不能。
为了避免竞争条件,每个共享的可变变量都需要同一个唯一确定的锁来保护。
通常来说,简单的并发逻辑和性能是互斥的。耗时的操作,比如网络或者控制台 I/O, 很难快速完成就不要占有锁了
- Java 并发之线程安全
- java并发编程基础之线程安全
- java并发:线程安全
- java-并发-线程安全
- java-并发-线程安全
- Java 并发 线程安全 ThreadLocal
- Java并发编程详解之 线程安全和对象共享
- Java并发编程实践笔记之-什么是线程安全
- Java 并发编程之线程安全(随手笔记)
- java线程安全之并发Queue(十三)
- 线程并发四:线程安全之synchronized
- 线程并发五:线程安全之重入锁
- Java并发之线程
- Java并发之线程
- 并发编程之线程安全HashMap_ConcurrentHashMap
- 深入剖析java线程安全和并发
- 【Java并发编程实践】— 线程安全
- java并发读书笔记系列--------线程安全
- JavaScript 开发者经常忽略或误用的七个基础知识点
- 从 char 数组 parseInt 实现
- UTF8 与 UTF16 编码
- eclipse 中 Tomcat DEBUG 模式启动慢,而运行模式正常
- 避免SQL SERVER频繁遭受攻击的方法
- Java 并发之线程安全
- Java 并发之共享对象
- js 把数组转换成json格式
- APP 压力测试脚本举例
- Python应用所需模块
- 一个用Python 在linux下批量文件名和去掉linux文件中^M的脚本
- source code of CV
- spring数据源的注入、JdbcTemplate管理、编程式的事务管理DataSourceTransactionManager
- 代码规范,切记,切记