账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    既然网络操作要放在子线程中,那同步(sync)请求又是怎么阻塞线程的?
    43
    0

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

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

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

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 霓裳挽歌倾城醉 普通会员 1楼

      在Java中,同步请求是指一个操作需要等待其他操作完成才能执行的操作。这些操作可能是阻塞操作,也可能是非阻塞操作。在Java中,使用synchronized关键字可以实现同步。

      同步请求阻塞线程主要有以下几种情况:

      1. 阻塞锁:这是一种特殊的同步,只有当线程访问一个共享资源后,才会获得锁。只有当其他线程也访问了该共享资源,并且线程持有锁时,阻塞锁才会释放,等待其他线程释放锁后,线程才能继续执行。

      2. 继承锁:这是一种特殊类型的同步,只有当子类继承了父类的同步时,子类的同步才有机会获取锁。如果子类不继承父类的同步,那么子类就不会获得同步。

      3. 共享锁:这是一种特殊类型的同步,只有当多个线程同时访问共享资源时,才会获得共享锁。如果只有一个线程在访问共享资源,那么共享锁就无法获取。

      以上三种情况,阻塞锁是最常见的,因为只有当其他线程也访问了共享资源,并且线程持有锁时,阻塞锁才会释放,等待其他线程释放锁后,线程才能继续执行。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部