Java同步sao操作总结

Java线程的同步

同步能解决的问题是什么呢?

其实线程中的问题有以下几种:

1.竞争条件 当计算的正确性取决于相对时间或者调度器所控制的多线程交叉时,静态条件就会发生。

2.数据竞争 数据竞争是两条或者两条以上的线程并发地访问同一块内存区域,其中至少一条是为了写,而且这些线程没有对那块内存区域的访问。造成的影响是访问的顺序是不确定的。

3.缓存变量 为了提升性能,编译器Java虚拟机以及操作系统会协调在寄存器中或者处理器缓存中缓存变量,而不是依赖主存。

同步临界区的访问同步是 JVM的一个特性,以串行的方式(一次一条线程)访问一段代码块。Java提供synchronized关键字来串行线程对方法和语句块的访问。

使用同步方法同步方法会在方法头部包含synchronized关键字。

使用同步块一个同步块语句把这个待锁住的对象作为前缀头。

语法结构:

synchronized(object){ /* statements*/}

谨防活跃性问题

1.死锁 线程1等待线程2互斥持有的资源,而线程2也在等待线程1互斥持有的资源。两条线程都无法继续执行。

2.活锁 线程X持续重试一个总是失败的操作,以至于无法执行

3.饿死无限延迟volatile和final变量同步的两种属性:互斥和可见性volatile关键字关联,是一种更弱的,仅仅包含可见性的同步形式。

attention:只有可见性导致问题时,才应该使用volative。而且,也只能在属性声明处才能使用这个保留字(如果尝试将局部变量声明成volative,会有错误)

之后会补上关于volative的使用案例

 

版权声明:本文为博主原创文章,未经博主允许不得转载。https://mp.csdn.net/postedit/80964087

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值