从不同的调度程序设置和读取rxJava链中的实例变量值

问题描述

我不确定使用不同的调度程序从rxJava链读取/写入实例变量的安全性。有一个小例子


public class RxJavaThreadSafety {

    private int variable = 0;

    // First call 
    public void doWriting() {
        Single.just(255)
                .doOnSuccess(
                        newValue -> variable = newValue
                )
                .subscribeOn(Schedulers.io())
                .subscribe();
    }

    // Second call
    public void doReadingRxChain() {
        Single.fromCallable((Callable<Integer>) () -> variable)
                .subscribeOn(Schedulers.computation())
                .subscribe(
                        result -> System.out.println(result)
                );
    }

    // Third call
    public void doReading() {
        System.out.println(variable);
    }

}

为简单起见,假设这三个方法一个接一个地调用

我的问题:在io调度程序中设置变量“并在最近从计算调度程序或主线程中读取此变量”是否安全?

我认为这不是线程安全的,但是我希望一些rxJava和并发专家对此进行证明

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)