我正在阅读OkHttp的源代码
以下是execute()
中的RealCall.java
:
public Response execute() throws IOException {
synchronized (this) {
if (executed) throw new IllegalStateException("Already Executed");
executed = true;
}
captureCallStackTrace();
try {
client.dispatcher().executed(this);
Response result = getResponseWithInterceptorChain();
if (result == null) throw new IOException("Canceled");
return result;
} finally {
client.dispatcher().finished(this);
}
}
同步的优势是什么?
synchronized (this) {
if (executed) throw new IllegalStateException("Already Executed");
executed = true;
}
我认为此代码没有任何不同之处(没有同步)
if (executed) throw new IllegalStateException("Already Executed");
executed = true;
例如,如果有三个请求同时发出。
要求一个人会通过,
请求两个会抛出异常,
请求三将不会执行。
是否存在同步,代码不起作用!
那么,为什么他们在那里写同步?