既然网络操作要放在子线程中,那同步(sync)请求又是怎么阻塞线程的?

drunkpiano
  • 176

比如OkHttp的同步请求会一直等待execute()执行完:

        Response response = client.newCall(request).execute();

是怎么做到的?难道execute()不是在子线程中执行的吗?

回复
阅读 3.4k
6 个回答
✓ 已被采纳

你可以把代码写一遍运行一次看看吗?

你对同步的理解有问题,不是说“同步”就只能发生在主线程。
这个同步只是说在当前线程执行,这个线程可以是任意线程,但是你在主线程运行的时候就是会报错。

jokester
  • 6.7k

execute() 阻塞当前线程。你要用其他线程的话可以enqueue()。

题目中的 "要" 我理解为应该。你不应该在UI线程 execute() 。

while(true){}

while死循环,怎么样

如果你这句话由子线程执行,它并不会阻塞主线程啊。

这个不是用来阻塞线程的

宣传栏