zoukankan      html  css  js  c++  java
  • 使用spring的多线程机制

    多线程并发处理起来通常比較麻烦,假设你使用spring容器来管理业务bean,事情就好办了多了。spring封装了java的多线程的实现,你仅仅须要关注于并发事物的流程以及一些并发负载量等特性。

    详细来说怎样使用spring来处理并发事务:

    首先编写详细的事务逻辑,实现Runnable接口。比方说

    package com.andy.threadDemo;

    public class ThreadTransCode implements Runnable{ 
        
      @Override
      public void run() {
        System.out.println("运行事务"); 
      }
    }
    然后要做的就是配置spring容器本身提供的线程池任务运行器:
    <bean id="taskExecutor"
        class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="3" />
        <property name="keepAliveSeconds" value="200" />
        <property name="maxPoolSize" value="5" />
        <property name="queueCapacity" value="25" />
      </bean>
    配置过程中主要关注于四个属性的配置
    接下来要做的事就是在应用系统本身的业务bean中使用线程池任务运行器来运行并发事务。
    在相应的业务bean中注入线程池任务运行器,像普通的spring bean一样。

    <bean id="bizManager"
          class="com.andy. threadDemo.BizManager" >
          <property name="taskExecutor">
            <ref bean="taskExecutor" />
          </property>

    </bean>
    在业务代码中,通常以for循环的方式运行多个事务
    for(int k = 0; k < n; k++) {    
            taskExecutor.execute(new ThreadTransCode());    
        }
    其他繁琐的线程管理的事情就交给运行器去管理。

    值得注意的事有两点
    1, taskExecutor.execute(new ThreadTransCode());  激活的线程都是守护线程,主线程结束,守护线程就会放弃运行,这个在业务中式符合逻辑的。在单元測试中为了看到运行效果,须要自行堵塞主线程。

    2, taskExecutor.execute(new ThreadTransCode());    的运行也不是全然安全的。在运行的过程中可能会由于须要的线程查过了线程队列的容量而抛出运行时异常,如有必要须要捕获。
  • 相关阅读:
    要素图层的介绍
    网络场景图WebScene介绍
    网络地图WebMap介绍
    信息窗口介绍
    图层Layers的介绍
    地图底图的类型——MapView,SceneView
    滑动效果实现
    关于计时器的js函数
    C#操作session的类实例(转)
    placeholder效果
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6772410.html
Copyright © 2011-2022 走看看