线程同步与锁

线程同步与锁

当多个线程同时操作一个数据源的时候,需要留意数据源操作被重复同时执行。这个时候就需要考虑线程同步与锁的问题。

  • 线程同步与锁

    • 使用关键字syncronized 来同步
      • syncronized修饰实例方法

    直接在方法返回类型与修饰符之间加上syncronized

  • syncronized修饰类方法(静态方法)
    直接在方法返回类型与static之间加上syncronized
  • syncronized修饰代码块
    在代码块前加上syncronized(Object lock), 这里的lock是Object的一个对象
  • 使用Object来上锁
    • syncronized修饰代码块需要加(Object lock)来上锁
  • wait与notify,还有死锁的问题

    • 火车票问题

    火车票问题里面,只需要同步就可以了,不需要加wait与notify, 加了反而再复杂。

  • 生产者与消费者模型
    一定需要加wait与notify

  • syncronized 的核心在于,操作同一个对象。
    - 当使用Thread创建线程的方式的时候,我们需要创建多个对象。但是多个对象表示,会有多个独立的方法。这样来说使用syncronized是没有什么意义的。所以此时

    syncronized修饰实例方法就必须改为修饰类方法,需要加static修饰

    >或者直接用syncronized修饰代码块,但是这样的话需要加一个Object lock。
    

    - 当使用Runnable来创建线程的方式的时候,因为我们可以传同一个对象进去,操作的是同一个对象,所以不用担心操作同一个对象的问题

    这样来说,无论使用哪一种方式来同步操作,都没什么问题。

    除开以上,还需要考虑使用syncronized时候的逻辑问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值