JAVA中如何保证线程安全以及主键自增有序

 我来答
一玄君VX06
2013-10-12 · TA获得超过4271个赞
知道小有建树答主
回答量:982
采纳率:33%
帮助的人:2318万
展开全部
一、常见场景 多个线程针对一个i进行主键自增。多线程下如果不做安全策略,将会导致各个现成获取的i值重复,导致脏数据常见策略1、增加syschroize进行线程同步 2、使用lock、unlock处理 3、使用reetrantent 锁进行锁定 缺点:容易造成性能低下,或者编写代码容易造成死锁二、新方案jdk新提供的功能,atomicInteger(还有其他一atomic开头的原子性操作类) AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。 原理:通过java的CAS compare and swap,简称cas原语进行操作提升性能,这个也号称乐观锁,不阻塞 观锁实际上并不加锁,当计算遇到冲突或者说前后不一致时会重试 直到成功 CAS有3个操作数 内存值V 要跟内存值做比较的值A 和 新值 B while(true){ if(V == A){V = B;return ;}else{A = V;}}CAS的操作对象为volatile类型 volatile类型变量是:CPU直接读写变量所在的内存 而不是把变量copy到寄存器操作 这样对变量的操作所有线程都是可见的这样做的结果是减少了并发时冲突的概率 但不能完全避免
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式