2017-07-27 5 views
0

OkHttp呼び出しを行う場合、コールバックメソッドのメモリの一貫性について心配する必要はありますか?OkHttpエンキューコールバックメソッドのメモリの一貫性?私は揮発性が必要ですか?

以下は私が求めている例です。メインスレッドでnが5に設定され、nへの他の書き込みはありません。その後、別のスレッドで実行されるonResponseでアクセスされます。私たちは、他のスレッドでそれを読むときにnの値が5になることを保証していますか(もしそうなら、なぜですか?)あるいは、私たちは揮発性にする必要がありますか?

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

すべてのインターセプタ、すべてのコールバックは、call.enqueue()前に行われた変更を観察します。エグゼキュータとのエンキュー作業と同じ保証(同じメカニズムです)です。

関連する問題