Java并发编程实战-----原子性

本文探讨了原子性的概念及其重要性,并分析了竞态条件和复合操作可能导致的问题。介绍了几种实现线程安全的方法,包括使用现成的线程安全类、加锁机制以及线程重入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、定义:可以作为一个不可分割的操作来执行。例如,count++就不具备原子性,它包含了读取、修改和写入3个独立的操作。

2、会导致不正确结果的情况

(1)竞态条件

当有多个线程时,正确的事件发生时序导致正确的结果,否则导致错误的结果。最常见的条件类型就是“先检查后执行”操作,即通过一个可能失效的观测结果来决定下一步的动作。

“先检查后执行”的一种常见情况就是延迟初始化。延迟初始化的目的是将对象的初始化操作推迟到实际被使用时才进行,同时要确保只被初始化一次。

(2)复合操作

复合操作:将“先检查后执行”以及“读取-修改-写入”等操作统称为复合操作。

当某个线程修改变量时,要防止其他线程使用这个变量,从而确保其他线程只能在修改操作完成之前或之后读取和修改状态,而不是在修改状态的过程中。

3、以上问题解决方法

(1)使用一个现有的线程安全类。

(2)加锁机制

java的内置锁相当于一种互斥体(互斥锁),是对同步代码块上锁,这意味着最多只有一个线程能持有这种锁,线程进入同步代码块之前获得锁,退出同步代码块时自动释放锁。

(3)允许线程重入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值