共享受限资源,Brian的同步规则
说明:如果一个变量是boolean,则此变量是原子性的,即赋值和返回值简单的操作在发生时没有中断的可能。
递增不是原子性炒作。
解决共享资源竞争:
1. 通过加锁,锁语句会产生相互排斥的效果,此种机制也成为互斥量。
通过关键之synchronized 关键字锁也称为监视器。
2. 通过使用显式的Lock对象,通过调用lock()与unlock()方法,其中unlock要在try-finally中的finally
二种方式比较:显示的Lock对象在加锁和释放锁方面,相对于内建的synchronized锁来说,赋予了更细粒度的控制力。而且显示Lock可以处理异常。
但是,建议只有在解决特殊问题时,才使用显示的Lock对象。
Brian的同步规则:
如果你正在写一个变量,他可能接下来将被另一个线程读取,或则正在读取一个上一次已经被另一个线程写过的变量,那么必须使用同步,
并且,读写线程都必须用相同的监视器锁同步。
注意:如果你的类中用超过一个方法处理临界数据,那么你必须同步所有相关的方法。如果只同步一个方法,那么其他方法将会随意护绿这个对象锁,并可以
在无任何惩罚的情况下被调用。这是很重要的一点:每个访问临界共享资源的方法都必须被同步,否则他们就不会正确地工作。
以上:来至于java编程思想
posted on 2015-11-19 23:49 struggle_beiJing 阅读(1023) 评论(1) 编辑 收藏 举报