为什么 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

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

在Observer类中访问Observable类的方法

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

用什么代替Observable()的Observable

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

    在Observer类中访问Observable类的方法

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

    用什么代替Observable()的Observable

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档