使用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());    的运行也不是全然安全的。在运行的过程中可能会由于须要的线程查过了线程队列的容量而抛出运行时异常,如有必要须要捕获。

时间: 2024-10-09 00:04:43

使用spring的多线程机制的相关文章

Java的多线程机制系列:不得不提的volatile及指令重排序(happen-before)

一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专家又往往建议我们远离它.比如Thread这个很基础的类,其中很重要的线程状态字段,就是用volatile来修饰,见代码 /* Java thread status for tools, * initialized to indicate thread 'not yet started' */   p

Spring 的核心机制:依赖注入(控制反转)

一.说到依赖注入(控制反转),先要理解什么是依赖. Spring 把相互协作的关系称为依赖关系.假如 A 组件调用了 B 组件的方法,我们可称A 组件依赖于 B 组件. 二.什么是依赖注入. 在传统的程序设计过程中,通常由调用者来创建被调用者的实例. 在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,因此称为控制反转:创建被调用者实例的工作通常由Spring 容器来完成,然后注入给调用者,因此也称为依赖注入. 三.依赖注入的好处. 依赖注入让 Spring 的 Bean 以被指文件组织在

android中的多线程机制

Google参考了Windows的消息处理机制,在Android系统中实现了一套类似的消息处理机制.学习Android的消息处理机制,有几个概念(类)必须了解: 1.       Message 消息,理解为线程间通讯的数据单元.例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更新信息的Message给UI线程. 2.       Message Queue 消息队列,用来存放通过Handler发布的消息,按照先进先出执行. 3.       Handler Handler是Messa

Matlab中用Timer实现多线程机制

Matlab中Timer的使用 鉴于Matlab 中缺乏多线程机制,使用Timer 无疑是一个很重要的工具,Matlab 中Timer 是一个Java 对象. (1) Timer 的定义  t=timer(); 设置属性: eg.  set(t,'Name','your_timer_name'); 当然可以一次性设置完成: 例如: TaskTimer=timer(... 'Name','FebirdTimer',... 'TimerFcn',@ExecuteTask,... 'ErrorFcn'

spring的缓存机制

在Spring缓存机制中,包括了两个方面的缓存操作:1.缓存某个方法返回的结果:2.在某个方法执行前或后清空缓存. spring是怎么进行缓存的,白话点讲就是:一个map来进行缓存,当调用aop时访问缓存,判断是否有对应数据存在.具体如下: 1.EHCache Spring仅仅是提供了对缓存的支持,但它并没有任何的缓存功能的实现,spring使用的是第三方的缓存框架来实现缓存的功能.其中,spring对EHCache提供了很好的支持.下面我们以EHCache为例来介绍spring的缓存配置. 在

《python源码剖析》笔记 python多线程机制

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.GIL与线程调度 Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(Global Interpreter Lock)来互斥线程对Python虚拟机的使用 为了支持多线程机制,一个基本的要求就是需要实现不同线程对共享资源访问的互斥,所以引入了GIL. GIL:在一个线程拥有了解释器的访问权之后,其他的所有线程都必须等待它释放解释器的访问权,即使这些线程的下

Java的多线程机制:缓存一致性和CAS

Java的多线程机制:缓存一致性和CAS 一.总线锁定和缓存一致性 这是两个操作系统层面的概念.随着多核时代的到来,并发操作已经成了很正常的现象,操作系统必须要有一些机制和原语,以保证某些基本操作的原子性,比如处理器需要保证读一个字节或写一个字节是原子的,那么它是如何实现的呢?有两种机制:总线锁定和缓存一致性. 我们知道,CPU和物理内存之间的通信速度远慢于CPU的处理速度,所以CPU有自己的内部缓存,根据一些规则将内存中的数据读取到内部缓存中来,以加快频繁读取的速度.我们假设在一台PC上只有一

Java学习笔记—第十一章 多线程机制

第十一章 Java多线程机制 了解Java中的进程与线程 1.1 进程:一般程序的结构大致可分为一个入口.一个出口和一个顺序执行的语句序列.程序运行时,系统从程序入口开始,按照语句的执行顺序(包括顺序.分支和循环)完成相应指令,然后从出口退出,程序结束.这样的结构称为进程.可以说,进程就是程序的一次动态执行的过程.一个进程既包括程序的代码,同时也包括系统的资源,如CPU.内存空间等.不同的进程所占用的系统资源都是独立的. 1.2 线程:线程是比进程更小的执行单位.一个进程在执行过程中,为了同时完

Spring容器核心机制

Spring容器核心机制 一.背景 Spring内部最核心的机制就是IOC,控制反转.它可以让你再使用某一个对象的时候不用再去new了,只需要告诉Spring你要调用的对象的beanid就可以.这其实就是利用java里的反射,反射其实就是在运行时动态的去创建.调用对象,Spring就是在运行时,根据配置文件或注解来动态的创建对象,和调用对象里的方法的 . Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的