`
zhouguiping2008
  • 浏览: 5288 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ibatis里面流控的实现

 
阅读更多
ibatis里面的流控实现是通过Throttle这个类来实现,既信号量,实例化时指定最大的访问量,每次请求时从这里获取一个信号量,如果已经达到阈值将阻塞或者抛出异常,以免大量的请求导致服务当机,每次请求时申请一个,请求结束返回,既信号量的实现,代码如下


申请资源
public void increment() {
    synchronized (LOCK) {
      long totalWaitTime = 0;
      while (count >= limit) {
        if (maxWait > 0) {
          long waitTime = System.currentTimeMillis();
          try {
            LOCK.wait(maxWait - totalWaitTime);
          } catch (InterruptedException e) {
            //ignore
          }
          totalWaitTime += System.currentTimeMillis() - waitTime;
          if (totalWaitTime > maxWait) {
            throw new RuntimeException("Throttle waited too long (" + totalWaitTime + " milliseconds) for lock.");
          }
        } else {
          try {
            LOCK.wait();
          } catch (InterruptedException e) {
            //ignore
          }
        }
      }
      count++;
    }
  }

释放资源
 /**
   * Remove a reference
   */
  public void decrement() {
    synchronized (LOCK) {
      count--;
      LOCK.notify();
    }
  }

客户端调用方式

  /**
   * Pop an object from the pool
   * @return - the Object
   */
  public Object pop() {
    throttle.increment();
    return pool.remove(0);
  }

  /**
   * Push an object onto the pool
   * @param o - the object to put into the pool
   */
  public void push(Object o) {
    if (o != null && o.getClass() == type) {
      pool.add(o);
      throttle.decrement();
    }
  }

分享到:
评论

相关推荐

    ibatis 框架原理实现

    **Ibatis 框架原理实现** Ibatis 是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,从而避免了Java代码与SQL的耦合,提高了开发效率。在这个自己编写的Ibatis框架实现中,我们可以看到类似的...

    修改ibatis源代码实现物理分页

    因此,我们需要通过修改Ibatis的源代码来实现物理分页,以提高查询效率。 物理分页是直接在数据库层面进行分页,避免了将所有数据加载到内存中的问题。下面我们将详细探讨如何在Ibatis中实现物理分页。 首先,了解...

    Struts2+Spring+iBATIS架构实现

    Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现

    spring+jotm+ibatis+mysql实现JTA分布式事务

    本项目“spring+jotm+ibatis+mysql实现JTA分布式事务”旨在利用这些技术来确保在分布式环境中的数据一致性。下面将详细介绍这个项目所涉及的知识点。 首先,Spring框架是Java开发中最常用的应用框架之一,它提供了...

    ibatis实现原理解析

    在本篇文章中,我们将深入解析Ibatis的实现原理,探讨其核心功能、工作流程以及优势。 一、Ibatis的核心概念 1. SQL映射文件:Ibatis通过XML或注解方式定义SQL语句,这些语句被封装在SQL映射文件中。映射文件包含...

    ibatis实现分页技术

    本篇将详细讲解如何利用Ibatis实现分页技术。 一、Ibatis简介 Ibatis是由Clinton Begin创建的一个SQL映射框架,它允许开发者将SQL语句直接写在配置文件中,通过Java接口与数据库进行交互,从而避免了传统的JDBC代码...

    ibatis应对批量update

    下面详细介绍如何利用ibatis实现高效的批量更新: 1. **准备工作**: - 首先确保你的ibatis版本支持批量更新功能。 - 在配置文件中启用批量更新功能。 2. **编写Mapper接口**: - 定义一个Mapper接口,并在其中...

    Ibatis和Spring整合例子,实现增删改查功能

    Ibatis和Spring整合例子,实现增删改查功能.

    ibatis实现数据的操作

    本篇文章将详细讲解如何利用Ibatis实现数据的连接、增加、查询、删除和修改(CRUD)操作,以及.xml文件在SQL映射中的作用。 首先,Ibatis是一个轻量级的Java ORM(对象关系映射)框架,它的核心理念是将SQL语句与...

    ibatis中使用安全的拼接语句,动态查询,大于、小于、等于.doc

    iBatis 中提供了多种方式来实现大于、小于、等于的判断。例如,我们可以使用 `<isGreaterThan>` 元素来判断参数是否大于某个值,使用 `<isLessThan>` 元素来判断参数是否小于某个值。 在上面的示例代码中,我们使用...

    ibatis总结 ibatis ibatis ibatis ibatis

    - `applicationContext.xml`是Spring的主配置文件,它定义了Spring容器中的bean,包括对Struts、Ibatis等其他框架的配置,实现各组件间的依赖注入。 - `codelist.xml`则可能包含了全局共享的bean,如`...

    ibatis实现CRUD操作

    Ibatis通过XML或注解方式定义和配置SQL映射,将Java对象和数据库记录进行映射,实现了数据的CRUD操作。 在实现CRUD操作时,Ibatis有以下核心组件: 1. SQL Map配置文件:这是Ibatis的核心,用于存放SQL语句及其...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    源码中`org.apache.ibatis.cache.Cache`接口定义了缓存的基本操作,而具体的缓存实现如`org.apache.ibatis.cache.impl.PerpetualCache`则实现了缓存的存储和读取。 通过阅读和理解iBatis的源码,我们可以更深入地...

    ibatis demo,ibatis例子,ibatis示例

    2. **Mapper接口和XML映射文件**:Ibatis通过Mapper接口和对应的XML映射文件实现SQL的声明式编程。接口定义了方法,XML文件则包含具体的SQL语句和结果映射。例如,一个UserMapper接口可能会有`selectUser`方法,对应...

    ibatis实现增删改查功能demo

    在本示例中,"ibatis实现增删改查功能demo"是一个具体的项目,旨在演示如何利用Ibatis进行数据库操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select)数据。以下将详细解析这个项目的重点内容...

    Spring+iBatis+JOTM实现JTA事务

    本篇文章将详细讲解如何利用Spring+iBatis+JOTM来实现JTA事务。 首先,我们需要理解JTA的核心概念。JTA定义了一组接口和规范,允许应用程序在不同的事务边界之间进行协调,确保原子性和持久性。JOTM作为JTA的一个...

    ibatis实现的学生信息管理示例

    这个名为“ibatis实现的学生信息管理示例”的项目,旨在帮助初学者理解并掌握如何利用Ibatis来处理数据库操作,如CRUD(创建、读取、更新、删除)学生信息。下面将详细介绍Ibatis框架的基本概念、工作原理以及如何...

    struts2+spring+ibatis+oracle+分页搜索+上传附件实例

    综上所述,这个实例展示了如何整合Struts2、Spring、iBatis和Oracle来构建一个完整的Web应用,实现了动态分页搜索和附件上传功能。这种架构具有良好的可扩展性和可维护性,适用于各种中大型企业级项目。开发者可以...

    iBATIS-DAO-2.3.4.726.rar_com.ibatis.dao_iBATIS dao 2_iBatis DAO_

    通过这种方式,iBATIS实现了SQL与业务逻辑的解耦,提高了代码的可读性和可维护性。 在源码中,`com.ibatis.dao`包下包含了许多关键类,例如`SqlMapClient`是整个框架的入口,负责管理所有的SQL Maps;`...

Global site tag (gtag.js) - Google Analytics