OkHttp中的内存一致性排队回调方法?我需要挥发性吗?

时间:2017-07-27 17:53:17

标签: multithreading okhttp

在进行OkHttp调用时,我是否需要担心回调方法中的内存一致性?

以下是我要问的一个例子。 n在主线程上设置为5,并且没有其他写入n。然后在onResponse中访问它,它在另一个线程上运行。我们保证在另一个线程上读取它时,n的值是5(如果是这样,为什么)?或者我们是否需要使n不稳定?

int n;
n = 5; // This is the only write to n. It happens on the main thread.
mOkHttpCall.enqueue(new Callback() {
    @Override
    public void onResponse(@Nonnull Call call, @Nonnull Response response) throws IOException 
    {
        // We're not on the main thread here. Is n guaranteed to be 5?
    }
});

1 个答案:

答案 0 :(得分:0)

所有拦截器和所有回调都将观察call.enqueue()之前所做的更改。这与使用Executor进行排队工作是一样的保证(和相同的机制!)。