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

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

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

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

阅读 5k
6 个回答

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

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

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

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

while(true){}

while死循环,怎么样

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

这个不是用来阻塞线程的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题