三、同步技术

来源:互联网 发布:rs232数据vlan 编辑:程序博客网 时间:2024/05/16 01:12

一、竟态条件引起了问题!

 

当多个线程执行顺序的不同会影响程序运行的结果时,产生了竟态条件。

  • 竟态条件可能是潜伏的,在一定条件下才会出现的
  • 程序员不应该让程序中存在竟态条件,——需要适当的同步!

二、同步和互斥锁

  • java中用synchronized关键字——利用对象互斥锁。
  • synchronized作用在“一个对象”上,既获取“一个对象”的对象锁。
  • 作为一个原则:不要选择在锁的作用域中改变值的实例变量作为锁对象。好难理解,举例说明如下:

        synchronized(obj1){

               ...

               obj1 = obj2;

               ...

        }

        obj1就不适合做锁对象,随便一个原因,obj2=null,synchronized(null)就会抛出异常。

 

三、同步块——锁的作用域

以下几点需要注意,并在实际的程序中应用。

  • 锁的作用域大,产生死锁的机会就很大
  • 嵌套锁。可以锁任意的一段代码,不需要管是否已经获取了对象的锁。

      synchronized (this) {
            synchronized (this) {
                 。。。。。

            }
       }