Java版管程:Synchronized

一、同步机制

保证共享资源的读写安全,需要一种同步机制:用于解决2方面问题:

  • 线程间通信:线程间交换信息的机制
  • 线程间同步:控制不同线程之间操作发生相对顺序的机制

二、同步机制-管程

2.1 认识管程

同步机制中有经典的管程方案,关于管程在在中国大学mooc中搜索 管程 有些大学的操作系统课程会讲解管程。管程其实就是对共享变量以及其操作的封装:

  1. 将共享资源封装起来,对外提供操作这些共享资源的方法。
  2. 线程只能通过调用管程中的方法来间接地访问管程中的共享资源

2.2 管程如何解决同步和通信问题:

  1. 同步问题:

    • 管程是互斥进入,管程提供了入口等待队列:存储等待进入同步代码块的线程
    • 管程的互斥性是由编译器负责保证的。
  2. 通信问题: 管程中设置条件变量,等待/唤醒操作,以解决同步问题。

    • 条件变量(java里理解为锁对象自身)
    • 等待操作:可以让进程、线程在条件变量上等待(此时,应先释放管程的使用权,不然别其它线程、进程拿不到使用权);将线程存储到条件变量的等待队列中。
    • 发信号操作:也可以通过发送信号将等待在条件变量上的进程、线程唤醒(将等待队列中的线程唤醒)

2.3 关键数据结构和方法:

  1. 线程队列:
    • 入口等待队列:存储等待进入同步代码块的线程;线程进入管程后,可以执行同步块代码。java中的_EntryList
    • 条件等待队列:入口等待队列中的线程,进入管程后,执行同步块代码的过程中,需要等待某个条件满足之后,才能继续执行,就将线程放入此变量的等待队列中。java是
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值