共享受限资源,Brian的同步规则

说明:如果一个变量是boolean,则此变量是原子性的,即赋值和返回值简单的操作在发生时没有中断的可能。

       递增不是原子性炒作。

解决共享资源竞争:

     1. 通过加锁,锁语句会产生相互排斥的效果,此种机制也成为互斥量。

         通过关键之synchronized 关键字锁也称为监视器。

     2. 通过使用显式的Lock对象,通过调用lock()与unlock()方法,其中unlock要在try-finally中的finally

二种方式比较:显示的Lock对象在加锁和释放锁方面,相对于内建的synchronized锁来说,赋予了更细粒度的控制力。而且显示Lock可以处理异常。

                    但是,建议只有在解决特殊问题时,才使用显示的Lock对象。

Brian的同步规则:

   如果你正在写一个变量,他可能接下来将被另一个线程读取,或则正在读取一个上一次已经被另一个线程写过的变量,那么必须使用同步,

并且,读写线程都必须用相同的监视器锁同步。

注意:如果你的类中用超过一个方法处理临界数据,那么你必须同步所有相关的方法。如果只同步一个方法,那么其他方法将会随意护绿这个对象锁,并可以

在无任何惩罚的情况下被调用。这是很重要的一点:每个访问临界共享资源的方法都必须被同步,否则他们就不会正确地工作。

以上:来至于java编程思想

原文地址:https://www.cnblogs.com/beijingstruggle/p/4979477.html