Java——线程安全问题,同步方法,同步代码块,生产者和消费者问题

  1. 线程安全问题
    当多个线程使用“共享数据”时,就会有线程安全问题
    当一个线程修改了“共享数据”,是会影响其它线程
    如何解决?
    加锁:通过同步代码块或同步方法
  2. 同步代码块
    语法格式:
    synchronized(锁对象){
    需要加锁的代码
    }
    锁对象:又称为监视器对象,同一时刻某一段代码,只允许一个线程运行,这个锁就记录谁现在在运行,其他线程进不来
    锁对象的选择:可以是任意类型的对象,必须是这几个线程使用同一个锁对象
    锁的代码的范围选择:太大不行,太小不行;锁一次任务
  3. 同步方法:锁的是一次调用过程
    语法格式:
    【修饰符】 synchronized 返回值类型 方法名(【形参列表】) throws 异常列表{
    }
    同步方法的锁对象:
    (1)静态方法:当前类的class对象
    (2)非静态方法:this
    避免死锁
  4. 生产者和消费者问题
    有两个或多个线程,其中一个或一部分线程,生产“数据”,称为生产者线程;另一个或另一部分线程,消耗“数据”,称为消费者线程。
    这些数据放在一个共享区域。那么就会出现:当“共享”区域中的数据空了,消费者线程必须“停/等待”,等待生产者线程生产了新数据后,继续进行;当“共享”区域中的数据满了,生产者线程必须“停/等待”,等到消费者线程消耗了数据后,继续进行
    生产者消费者问题及如何解决:
    (1)共享数据:就会有线程安全问题,需要“同步”来解决
    (2)共享区域大小固定的:就需要用到“协作”,即线程通信。
    Object类中有:
    (1)wait():必须由锁对象(线程的监视器对象)来调用
    (2)notify():必须由锁对象(线程的监视器对象)来调用,其作用就唤醒一个正在等待的线程,唤醒的只能是想要获取同一个锁对象的线程。
    (3)notifyAll():唤醒所有和我是同一个监视器对象的正在等待的线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值