美文网首页
阻塞模式

阻塞模式

作者: 石器时代小古董 | 来源:发表于2017-11-28 17:07 被阅读0次

一、阻塞模式定义

通过某一个状态保证一个对象的任务还没有完成时,不能执行新的任务。

二、使用场景

1.当有多个线程操作这个对象时,保证对象状态的唯一。

三、核心思想

1.通过判断标志位的状态是否符合条件来判断代码是否执行
2.通过加锁的机制保证多线程下状态的原子性

四、代码实现

参考okhttp中RealCall的execute方法。通过标志位和锁的配合,保证这是一个阻塞式的方法

  // 通过该标志位确保任务是否在执行
  private boolean executed;
  ......
  ......

  @Override
  public Response execute() throws IOException {
   //synchronized关键词锁住当前对象,获得当前对象的锁
    //同一时刻只能有一个任务执行 因为是阻塞式的 由synchronized关键字锁住
    synchronized (this) {
     //通过标志位保证当前对象在执行任务时 不会再重复执行
      if (executed) throw new IllegalStateException("Already Executed");
      executed = true;
    }
     ........
      if (result == null) throw new IOException("Canceled");
      return result;
    } finally {
      client.dispatcher().finished(this);
    }
  }

相关文章

  • netty(四)nio之网络编程

    一、阻塞与非阻塞 1.1 阻塞 1.1.1 阻塞模式会存在哪些问题? 1)在阻塞模式下,以下的方法都会导致线程暂停...

  • 非阻塞connect和accept

    1 非阻塞connect 1.1 阻塞模式与非阻塞 调用connect会发起三次连接。 阻塞模式下,connect...

  • 02 NIO网络编程

    1 网络编程 1 阻塞 1.1 阻塞模式概述 阻塞模式下,相关方法都会导致线程暂停ServerSocketChan...

  • Java NIO 实现 EchoServer EchoClien

    阻塞模式 EchoServer采用阻塞模式,用线程池中的工作线程处理每个客户连接。EchoClient也采用阻塞模...

  • 阻塞模式和非阻塞模式

    使用socket编程实现数据传输的过程中,通常的默认设置假设套接字是阻塞的。每个TCP套接字有一个发送缓冲区,当应...

  • Python实现socket的非阻塞式编程

    阻塞模式与非阻塞模式 阻塞模式 程序碰到了一些耗时操作,无法继续向下走。 例如在socket编程中,例如在send...

  • 阻塞模式

    一、阻塞模式定义 通过某一个状态保证一个对象的任务还没有完成时,不能执行新的任务。 二、使用场景 1.当有多个线程...

  • epoll的提高--工作模式

    水平触发模式 -- 默认就是这种模式(如上一篇所写) 边沿阻塞触发模式 边沿非阻塞工作模式 -- 效率最高 先来个...

  • BIO-NIO-AIO

    BIO (Blocking I/O):同步阻塞I/O模式。 NIO (New I/O):同步非阻塞模式。 AIO ...

  • IO通信模型(二)同步非阻塞模式NIO(NonBlocking

    同步非阻塞模式(NonBlocking IO) 在非阻塞模式中,发出Socket的accept()和read()操...

网友评论

      本文标题:阻塞模式

      本文链接:https://www.haomeiwen.com/subject/qsdebxtx.html