例如:我希望用5个线程不停的跑一个业务逻辑,直到容器关闭为止。
业务逻辑ProductService 此业务逻辑用来在线程中跑,所以需要继承Runnable
public class ProductService implements Runnable{
private int id;
public ProductService(int threadId){
this.id = threadId;
}
...
public void run()
{
try
{
logger.info( "延迟60秒 启动发送线程..." );
Thread.sleep( 60000 );
}
catch ( InterruptedException e )
{
e.printStackTrace();
logger.error( "InterruptedException 线程退出..." );
}
while ( true ) //让线程一直跑下去
{
logger.info( "线程 【" + this.id + "】 开始运行 ......" );
try
{
this.send();
}
catch ( Exception e )
{
logger.error( "发送产生异常..." );
StringWriter sw = new StringWriter();
e.printStackTrace( new PrintWriter( sw ) );
logger.error( sw.toString() );
}
}
/**
* 主方法体;
*/
public void send(){
.....
}
...
}
之后需要一个线程生成并调用者,希望容器启动就开始生成这5个线程,所以继承spring的InitializingBean
ProductInvoker
public class ProductInvoker implements InitializingBean{
public void afterPropertiesSet() throws Exception{
for(int i=1;i<=5;i++)
{
ProductService r = new ProductService(i);
Thread _thread = new Thread(r);
_thread.start();
}
}
}
在spring配置文件中注入这个ProductInvoker调用者
分享到:
相关推荐
一个线程从A表读数据放入队列 N个线程从队列中取出...支持大数据量跑批,就是个例子,本来是公司发送促销邮件用的,欢迎提意见和建议。 运行DispatcherMain可以测试,库结构自己可以根据code随便改成父子表关系的就行
在这个例子中,我们可能会创建两个类,每个类实现`Runnable`接口,并重写`run()`方法,该方法包含线程的主要工作逻辑。例如: ```java public class ThreadOne implements Runnable { @Override public void run...
1. 编写程序,使用两个线程,一个队列, 其中一个线程从键盘读取数据,放入到队列中,直到读取的数据是字符串quit则结束,线程的任务就是循环读取数据直到特定的字符串quit。另外一个线程,不断的从队列中读取数据...
在windows的环境下,创建一个控制台进程,此进程创建两个并发线程,一个是读线程,另一个是写线程。这两个线程共享一个数组A,写线程对数组分别进行10次写操作,每次写操作对A的每个元素赋一个相同的值;读线程对数组...
用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件(后面介绍)的要求进行读写操作。用信号量机制分别实现读者优先和写者优先问题。 读者-写者问题的读写操作限制(包括读者优先和写者优先) 1) 写-写...
用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求进行读写操作。用信号量机制分别实现读者优先和写者优先问题。 1、读者-写者问题的读写操作限制(包括读者优先和写者优先) 1)写-写互斥:不能有...
4. **异步处理**:为了防止用户界面冻结,复杂的业务逻辑往往需要在后台线程中异步执行,然后通过回调或事件通知UI更新。 5. **可测试性**:良好的业务逻辑设计应该允许单元测试和集成测试,以验证其功能和性能。 ...
- **目标**:通过创建一个控制台进程,其中包含n个线程,模拟n个读者或写者的读写操作行为。 - **实现方式**:采用信号量机制来解决读者优先和写者优先的问题。 #### 关键概念解析 1. **信号量机制**:这是一种...
- 在易语言中,可以使用“创建线程”命令来创建一个新的线程,该命令会返回一个线程ID,这个ID用于后续的线程管理和操作。 - 当线程执行完毕或被强制中断时,系统会自动清理线程资源。但若需手动结束线程,可使用...
用这n个线程来表示n个读者或写者。用信号量机制分别实现读者优先和写者优先的读者-写者问题。 读者-写者问题的读写操作限制(包括读者优先和写者优先): 1)写-写互斥:不能有两个写者同时进行写操作。 2)读-写...
单线程模型简化了程序设计,降低了程序复杂度,使得开发者可以更专注于业务逻辑的实现,而无需过多考虑多线程间的同步问题。 单线程的优势主要体现在以下几个方面: 1. **简化程序设计**:由于无需处理多线程间的...
在Cocos2d-x游戏引擎中,多线程的使用是一项关键的技术,它能帮助开发者实现游戏的异步处理,提高程序的响应速度和效率。本文将深入探讨Cocos2d-x中如何创建和管理多线程。 首先,我们要了解线程的基本概念。线程是...
在线程的`InitInstance()`函数中,我们可以编写线程的主要业务逻辑代码。 为了启动线程,我们需要调用`AfxBeginThread()`函数,传入我们的`CMultiThread`对象的实例和适当的线程优先级。例如: ```cpp ...
基于事件的 NIO 多线程服务器
超线程技术的核心原理是通过硬件指令将一个物理核心划分为两个逻辑核心,使处理器能够同时处理两个线程。这样,即使在单核处理器上,也可以实现类似多核处理器的线程级并行计算。这种并行处理能力对于多线程操作系统...
使用其他线程修改界面元素可能会导致未知错误,因此需要使用适当的同步机制,如PostMessage或SendDlgItemMessage,从非用户界面线程向用户界面线程发送消息。 四、线程间通信 在MFC中,线程间通信可以通过几种方式...
在VC++编程环境中,线程同步是一个至关重要的概念,特别是在多线程程序设计中,以确保并发执行的线程能够安全地访问共享资源,避免数据竞争和其他潜在的问题。本篇文章将详细探讨线程锁在VC++中的应用,以及如何通过...
它们自动处理线程同步,使程序员能专注于业务逻辑。 8. **线程安全的数据结构** .NET框架提供了一些线程安全的集合类,如`ConcurrentBag<T>`、`ConcurrentDictionary, TValue>`等,它们在多线程环境中提供了线程...
在编程领域,多线程是一种常见且强大的技术,它允许程序同时执行多个任务,从而提高效率和响应性。本主题聚焦于Delphi 7中实现的多线程测试,特别是涉及40个并发线程的情况。Delphi是Embarcadero开发的一款集成开发...
为了防止多个线程同时修改这个变量,我们在`Increment`、`Decrement`和`GetValue`方法中都使用了`lock`语句。`lock`关键字用于创建一个互斥锁,确保在给定的代码块中,同一时间只有一个线程可以执行。当一个线程进入...