三、同步技术

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

 

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

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

二、同步和互斥锁

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

        synchronized(obj1){

               ...

               obj1 = obj2;

               ...

        }

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

 

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

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

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

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

            }
       }

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值