为什么 Observable 类中的方法是同步的?

斯瓦米·托塔

为什么 Observable 类中的方法是同步的?

public synchronized void deleteObserver(Observer o) {
        obs.removeElement(o);
    }
色拉

我不能给你一个明确的答案,说明为什么 Observable以这种方式实施,但我可以解释它的效果。

WhileVector是一个同步集合,它在迭代时不同步这类似于Collections.synchronizedXXX方法返回的包装器为了Vector在并发上下文中安全地迭代 a ,您需要外部同步。他们通过使用synchronized方法来实现这一点但是,如果您查看一下,notifyObservers您会发现该方法并未同步。但是,如果您查看主体,notifyObservers则会看到一个synchronized(this) {}块。他们这样做是因为在持有锁时只需要执行方法体的一部分。如果您不知道,synchronized实例方法与synchronized(this) {}用于整个方法的方法相同。

使用synchronized方法造成的另一个影响obs字段和changed字段都被同一个锁保护。这使这两个字段之间的状态在多线程环境中保持一致。为什么他们选择封闭实例作为锁,我不知道,但这就是他们所做的。

请注意,就我所知,Observable该类在其文档中不保证线程安全。这意味着它是线程安全的这一事实是一个实现细节。

另请注意,Observable自 Java 9 以来已被弃用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么同步方法总是返回false?

来自分类Dev

为什么顺序在Observable.merge的这种用法中很重要?

来自分类Dev

为什么我的计时器Observable从未调用过?

来自分类Dev

在Java中,为什么Observable的setChanged()受保护?

来自分类Dev

在Observer类中访问Observable类的方法

来自分类Dev

为什么这些RxJS.Observable序列中的第二项被跳过?

来自分类Dev

为什么未调用RxJS Observable构造函数中的代码?

来自分类Dev

RxJava-立即执行单个Observable-为什么?

来自分类Dev

模拟RxJava Observable的正确方法是什么

来自分类Dev

为什么String类的构造方法与参数的StringBuffer使用同步块,而与StringBuilder的构造不?

来自分类Dev

为什么重复将Enumerable转换为Observable转换块

来自分类Dev

为什么我的redux-observable史诗没有被触发?

来自分类Dev

在Python中,为什么类方法会覆盖实例方法?

来自分类Dev

当在Angular中串联多个HttpClient调用时,为什么concat RxJS运算符会发出Observable而不是值

来自分类Dev

为什么订阅在Angular中无法使用Observable工作

来自分类Dev

用什么代替Observable()的Observable

来自分类Dev

为什么在Angular中使用Observable而不是对象引用

来自分类Dev

为什么Observable.FromEventPattern接受调度程序?

来自分类Dev

为什么同步方法不起作用?

来自分类Dev

为什么顺序在Observable.merge的用法中很重要?

来自分类Dev

为什么Observable.Buffer与bufferClosingSelector不起作用

来自分类Dev

为什么在NodeJS中同步执行String的split方法?

来自分类Dev

RxJava-立即执行单个Observable-为什么?

来自分类Dev

为什么Rx.Observable.of(true)开始发出

来自分类Dev

为什么在同步块中得到IllegalMonitorException?

来自分类Dev

为什么 rxScala Observable zipWith 评估为 Observable[Nothing]

来自分类Dev

在 Observable 的菱形图案中,`withLatestFrom` 保证什么?

来自分类Dev

为什么 Observable.delay() 不被尊重?

来自分类Dev

为什么我无法在 Angular 中订阅来自不同模块的 observable(而 setter 也可以)

Related 相关文章

  1. 1

    为什么同步方法总是返回false?

  2. 2

    为什么顺序在Observable.merge的这种用法中很重要?

  3. 3

    为什么我的计时器Observable从未调用过?

  4. 4

    在Java中,为什么Observable的setChanged()受保护?

  5. 5

    在Observer类中访问Observable类的方法

  6. 6

    为什么这些RxJS.Observable序列中的第二项被跳过?

  7. 7

    为什么未调用RxJS Observable构造函数中的代码?

  8. 8

    RxJava-立即执行单个Observable-为什么?

  9. 9

    模拟RxJava Observable的正确方法是什么

  10. 10

    为什么String类的构造方法与参数的StringBuffer使用同步块,而与StringBuilder的构造不?

  11. 11

    为什么重复将Enumerable转换为Observable转换块

  12. 12

    为什么我的redux-observable史诗没有被触发?

  13. 13

    在Python中,为什么类方法会覆盖实例方法?

  14. 14

    当在Angular中串联多个HttpClient调用时,为什么concat RxJS运算符会发出Observable而不是值

  15. 15

    为什么订阅在Angular中无法使用Observable工作

  16. 16

    用什么代替Observable()的Observable

  17. 17

    为什么在Angular中使用Observable而不是对象引用

  18. 18

    为什么Observable.FromEventPattern接受调度程序?

  19. 19

    为什么同步方法不起作用?

  20. 20

    为什么顺序在Observable.merge的用法中很重要?

  21. 21

    为什么Observable.Buffer与bufferClosingSelector不起作用

  22. 22

    为什么在NodeJS中同步执行String的split方法?

  23. 23

    RxJava-立即执行单个Observable-为什么?

  24. 24

    为什么Rx.Observable.of(true)开始发出

  25. 25

    为什么在同步块中得到IllegalMonitorException?

  26. 26

    为什么 rxScala Observable zipWith 评估为 Observable[Nothing]

  27. 27

    在 Observable 的菱形图案中,`withLatestFrom` 保证什么?

  28. 28

    为什么 Observable.delay() 不被尊重?

  29. 29

    为什么我无法在 Angular 中订阅来自不同模块的 observable(而 setter 也可以)

热门标签

归档