美文网首页
阻塞模式

阻塞模式

作者: 石器时代小古董 | 来源:发表于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);
        }
      }
    

    相关文章

      网友评论

          本文标题:阻塞模式

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