线程同步方式的实现1

线程同步方式的实现1

线程同步

互斥: 许多线程 在 同一个共享数据上 操作而 互不干扰, 同一时刻只能有 一个线程 访问 该共享数据.

因此

synchronized, 线程同步关键字, 实现互斥

  • 用于指定需要通过的代码段 或 方法, 也就是 监视区

  • 可实现与 一个锁的 交互, 例如

    synchronized(对象)

synchronized的功能是

首先判断对象的锁是否存在,

如果在就 获得锁, 然后就可以执行 紧随其后的 代码段;

如果 对象的锁不在(已被其他线程拿走), 就进入等待状态, 直到 获得锁

当被 synchronized 限定的 代码段 执行完, 就释放锁

互斥

存票线程 和 售票线程 应保持 互斥关系,

即 售票线程 执行时 不进入 存票线程, 存票线程执行时 不进入 售票线程

Java使用 监视器 机制

每个对象只有一个 "锁", 利用多线程 对 "锁" 的争夺, 实现线程间的互斥

当线程A 获得了 一个对象的锁后, 线程B 必须等待 线程A, 完成规定的操作, 并释放出锁后, 才能获得 该对象的锁, 并执行线程B中的操作

同步与锁的要点

1, 线程睡眠时, 它所持的 任何锁 都不会释放

2, 线程可以获得 多个锁

比如, 在一个对象的同步方法里面, 调用 另一个对象的 同步方法, 则获取了 两个对象的 同步锁

3, 同步损害并发性, 应该尽可能 缩小同步范围.

同步不但可以同步整个方法, 还可以同步方法中 一部分代码块

4, 在使用 同步代码块时候, 应该指定在哪个对象上同步, 也就是说要获取 哪个对象的锁

参考链接

https://www.xuetangx.com/learn/THU08091000252/THU08091000252/7754101/video/12732931

posted on 2021-11-06 13:24  beyondx  阅读(26)  评论(0编辑  收藏  举报

导航