DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 经验分享 > Java组件

使用spring的多线程机制

多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了。spring封装了java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性。具体来说如何使用spring来处理并发事务:

首先编写具体的事务逻辑,实现Runnable接口,比如说

packagecom.andy.threadDemo;

publicclassThreadTransCodeimplementsRunnable{ 

@Override

publicvoidrun() {

System.out.println("执行事务"); 

}

}

然后要做的就是配置spring容器本身提供的线程池任务执行器:

<beanid="taskExecutor"

class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">

<propertyname="corePoolSize"value="3"/>

<propertyname="keepAliveSeconds"value="200"/>

<propertyname="maxPoolSize"value="5"/>

<propertyname="queueCapacity"value="25"/>

</bean

>

配置过程中主要关注于四个属性的配置

接下来要做的事就是在应用系统本身的业务bean中使用线程池任务执行器来执行并发事务。

在对应的业务bean中注入线程池任务执行器,像普通的spring bean一样。


<beanid="bizManager"

class="com.andy. threadDemo.BizManager">


<propertyname="taskExecutor">

<refbean="taskExecutor"/>

      </property

>


</bean

>


在业务代码中,通常以for循环的方式执行多个事务


for(intk = 0; k < n; k++) {    

taskExecutor.execute(newThreadTransCode());    

}


其它繁琐的线程管理的事情就交给执行器去管理。

值得注意的事有两点

1, taskExecutor.execute(newThreadTransCode());  激活的线程都是守护线程,主线程结束,守护线程就会放弃执行,这个在业务中式符合逻辑的,在单元测试中为了看到执行效果,需要自行阻塞主线程。

2, taskExecutor.execute(newThreadTransCode());    的执行也不是完全安全的,在执行的过程中可能会因为需要的线程查过了线程队列的容量而抛出运行时异常,如有必要需要捕获。

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号