在进行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?
}
});
答案 0 :(得分:0)
所有拦截器和所有回调都将观察call.enqueue()
之前所做的更改。这与使用Executor进行排队工作是一样的保证(和相同的机制!)。