`

bbossgroups 线程池使用

阅读更多
       线程池使用
1.1    线程池配置

可以在任意的aop xml配置文件中配置线程池,只需将相关的xml配置文件直接或者间接导入manager-provider.xml文件既可,这里以一个thread.xml文件为列来说明线程池的配置:

<?xml version="1.0" encoding='gb2312'?>

<manager-config>

    <properties>



       <property name="test.threadpool">

           <map>

              <property name="corePoolSize" value="5" />

              <property name="maximumPoolSize" value="10" />

              <!--

                  TimeUnit.SECONDS TimeUnit.MICROSECONDS TimeUnit.MILLISECONDS

                  TimeUnit.NANOSECONDS 时间单位适用于以下参数: keepAliveTime waitTime

                  delayTime(当delayTime为整数时间而不是百分比时有效)

              -->

              <property name="timeUnit" value="TimeUnit.SECONDS" />

              <property name="keepAliveTime" value="40" />

              <!--

                  /** * LinkedBlockingQueue * PriorityBlockingQueue *

                  ArrayBlockingQueue * SynchronousQueue */

              -->

              <property name="blockingQueueType" value="ArrayBlockingQueue" />

              <property name="blockingQueue" value="10" />



              <!--

                  RejectedExecutionHandler

                  必须实现java.util.concurrent.RejectedExecutionHandler接口 目前系统提供以下缺省实现:

                  org.frameworkset.thread.WaitPolicy

                  循环等待event.threadpool.waitTime指定的时间,单位为秒

                  java.util.concurrent.ThreadPoolExecutor.DiscardPolicy 直接丢弃任务,不抛出异常

                  java.util.concurrent.ThreadPoolExecutor.AbortPolicy

                  直接丢弃任务,抛出异常RejectedExecutionException

                  java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy 直接运行

                  java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy

                  放入队列,将最老的任务删除

              -->

              <property name="rejectedExecutionHandler" value="org.frameworkset.thread.WaitPolicy" />

              <!--

                  以下参数只有在配置的org.frameworkset.thread.WaitPolicy策略时才需要配置

               -->

              <property name="waitTime" value="1" />

              <property name="delayTime" value="10%" />

              <property name="maxWaits" value="2" />

              <property name="waitFailHandler"

                  value="org.frameworkset.thread.TestThread$WaitFailHandlerTest" />



           </map>

       </property>

    </properties>



</manager-config>

将thread.xml文件存储在classes目录下,在manager-provider.xml文件中导入既可:

<managerimport file="thread.xml" />



可以配置多个线程池,只要<property name="test.threadpool">指定不同的name(线程池的名称)即可。


1.2    获取线程池实例

获取线程池实例的方法如下:

ThreadPoolExecutor

executer =

ThreadPoolManagerFactory.getThreadPoolExecutor("test.threadpool");

获取名称test.threadpool时不会每次都创建线程池的实例,只有第一次获取时才会创建实例,因此是单实例的。如果在获取test.threadpool的线程池是,对应的配置文件中并没有配置test.threadpool那么将采用默认的线程池参数来创建线程池实例。

默认的配置信息如下:

Pro pro = new Pro();

        pro.setName("corePoolSize");pro.setValue("5");

        defaultPoolparams.put("corePoolSize", pro);

        pro = new Pro();

        pro.setName("maximumPoolSize");pro.setValue("10");

        defaultPoolparams.put("maximumPoolSize", pro);

        pro = new Pro();

        pro.setName("keepAliveTime");pro.setValue("30");

        defaultPoolparams.put("keepAliveTime", pro);

        pro = new Pro();

        pro.setName("timeUnit");pro.setValue("TimeUnit.SECONDS");

        defaultPoolparams.put("timeUnit", pro);

        pro = new Pro();

        pro.setName("blockingQueue");pro.setValue("10");

        defaultPoolparams.put("blockingQueue", pro);

        /**

         * DelayQueue LinkedBlockingQueue PriorityBlockingQueue

         * ArrayBlockingQueue SynchronousQueue

         */

        pro = new Pro();

        pro.setName("blockingQueueType");pro.setValue("ArrayBlockingQueue");

        defaultPoolparams.put("blockingQueueType", pro);

        pro = new Pro();

        pro.setName("rejectedExecutionHandler");pro.setValue("org.frameworkset.thread.RejectRequeuePoliecy");

        defaultPoolparams.put("rejectedExecutionHandler", pro);

        pro = new Pro();

        pro.setName("waitTime");pro.setValue("1");

        defaultPoolparams.put("waitTime", pro);

        pro = new Pro();

        pro.setName("delayTime");pro.setValue("20%");

        defaultPoolparams.put("delayTime", pro);

        pro = new Pro();

        pro.setName("maxWaits");pro.setValue("-1");

        defaultPoolparams.put("maxWaits", pro);

        pro = new Pro();

        pro.setName("maxdelayTime");pro.setValue("4");

        defaultPoolparams.put("maxdelayTime", pro);
1.3    使用线程池来执行任务
1.3.1   定义一个任务

public static class Run implements Runnable

    {



        public void run()

        {

            if (true)

            {

                i ++;

                System.out.println("run:"+ i);

                try

                {

                    synchronized(this)

                    {

                        this.wait(4000);

                    }

                }

                catch (InterruptedException e)

                {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }



        }



}


1.3.2   利用线程池来执行任务

一般的使用方法:

ThreadPoolExecutor executer = ThreadPoolManagerFactory.getThreadPoolExecutor("test.threadpool");

for(int i = 0; i < 50 ; i ++)

       executer.execute(new Run());

如果线程池趋于繁忙时,外部可以通过执行 InnerThreadPoolExecutor类的以下方法来缓解系统的压力(采用等待阻塞延时方法):

public boolean busy(RejectCallback rejectcallback, BaseLogger log)

例如:

InnerThreadPoolExecutor executer = (InnerThreadPoolExecutor)ThreadPoolManagerFactory.getThreadPoolExecutor("test.threadpool");

for(int i = 0; i < 50 ; i ++)

{

executor.busy(rejectcallback, baselog);

executer.execute(new Run());
}



rejectcallback为org.frameworkset.thread. RejectCallback的子类,

baselog为org.frameworkset.log.BaseLog的类实例。
1.3.3   线程池的关闭

所有的线程池在jvm关闭时自动关闭。
分享到:
评论

相关推荐

    bbossgroups 3.1SQLExecutor组件ap使用实例

    在Java开发中,bbossgroups 3.1框架提供了一个名为SQLExecutor的组件,用于简化数据库操作。这个组件提供了一种高效的批处理和单条SQL执行的方式,它基于Apache License 2.0开源,允许开发者在遵守相应条款的情况下...

    bbossgroups 开发系列文章之一 最佳实践

    配置中,`alwaysUseFullPath`属性确保URL始终使用完整路径,而`handlerMap`引用了处理URL和控制器映射的注册表。 数据库访问组件和SQL语句配置文件是数据层的关键。bbossgroups提供了一套便捷的数据访问组件,允许...

    bbossgroups 3.0 培训教程

    本教程将围绕bbossgroups 3.0版本,深入讲解其核心概念、使用方法以及最佳实践。 首先,我们要理解bbossgroups的核心设计理念。它基于模块化架构,使得开发者可以根据项目需求选择合适的组件,避免了不必要的性能...

    Bbossgroups体系架构.ppt

    5. **RESTful架构**:Bboss支持RESTful风格的API设计,这使得系统的接口更加简洁、直观,易于理解和使用,尤其适合于Web服务的开发。 6. **持久层框架**:Bboss提供了持久层框架,简化了数据库操作,支持SQL动态...

    bbossgroups 3.1培训教程.ppt

    **bbossgroups 3.1培训教程** bbossgroups 3.1是一个企业级J2EE开发框架,自2005年以来不断发展和完善,旨在提供高效、稳定的开发工具和解决方案。本教程将深入介绍bbossgroups 3.1的主要特性、发展历程以及其在...

    bbossgroups 3.0 发布,国内首款集

    ### bbossgroups 3.0 发布,国内首款集成多技术的企业级J2EE开发框架 #### 概述 近日,bbossgroups 3.0 正式发布,这款国内首款集AOP(面向切面编程)、MVC(模型-视图-控制器)、Persistent(持久化)、JSP ...

    bboss mvc 通过jsonp实现跨站跨域远程访问

    提供的压缩包文件"bbossgroups 框架培训教程.pptx"和"Bbossgroups演示文档.pptx"可能包含了更多关于bboss mvc框架的详细信息和使用示例,包括如何配置和使用JSONP等特性。建议查阅这些文档以获取更深入的理解。 总...

    基于Java和Shell的bboss session framework跨域集群节点会话共享与监控设计源码

    该框架包含222个文件,包括164个Java源文件、14个XML配置文件、6个Gradle构建文件、6个JAR包文件、6个属性文件等,旨在支持跨域应用集群节点的会话共享与监控,并提供示例站点http://session.bbossgroups.com/...

    bboss-elastic-tran:bboss 数据同步工具

    弹性Tran老板数据交换模块使用文档: : Bboss是一个很好的Elasticsearch Java Rest客户端。 它运行并访问像mybatis这样的... 首先将BBoss的maven依赖项添加到pom.xml中: &lt; dependency&gt; &lt; groupId&gt;com.bbossgroups.p

    企业级J2EE开源框架bboss

    BBoss(全称为bbossgroups)是一个专为企业级J2EE应用设计的开源框架,它为Java开发者提供了一系列强大的工具和服务,以简化Web应用程序的开发过程。该框架旨在提高开发效率,降低维护成本,同时保持高度的灵活性和...

    java版地图源码-bboss-elasticsearch:最好的elasticsearch高级javarest客户端api-----bbos

    java版地图源码弹性搜索Bboss Bboss 是一个很好的 elasticsearch ...如何使用 Elasticsearch BBoss。 首先将BBoss的maven依赖添加到你的pom.xml中: &lt; dependency &gt; &lt; groupId &gt;com.bbossgroups.p

    2013年度中国优秀开源项目列表

    12. bboss:bbossgroups是首个集成AOP、MVC、持久层、JSP标签库、分布式RPC服务和序列化组件的JavaEE企业级开发框架。 13. BeeFramework:BeeFramework是iOS平台的快速开发框架,特点包括易学易用、组件丰富,提供...

Global site tag (gtag.js) - Google Analytics