`

java中线程的管理以及线程组的实现运用构造心得

阅读更多

前言,在支付系统项目中,运用了一些多线程的任务,现在此记录学习一下,以备以后运用到,同时自己也理一下逻辑思想。

 

在项目中有这样几个需求,需要接受项目组中上游项目传送过来的数据请求,请求包括了支付,同步,余额,明细大体四个分支。在项目中因为上游是通过传送特定的json字符串,用http的请求,向我们的项目中发出请求操作,所以我们用多线程的思路来完成这几个操作:

 

第一步:

创建一个抽象的类AsyncRequestExecutor ,同时实现Runnable,在构造方法中实例化一个非阻塞队列ConcurrentLinkedQueue (先进先出);同时包括几个方法putRequest(String date) ,该方法往队列中add请求数据,notifyWork():唤醒当前的线程,stopWork():停止工作,以及@Override run方法,在run方法中获得队列中的数据,分析是4种操作的哪一种,进行工作。在这有点注意的是如何调用对应的线程,以及相应的方法进行操作?这里我们要添加一个抽象的方法operationImpl(string data).

 

第二步

创建了4个 线程:PayAsyncRequestExecutor,QueryPayAsyncRequestExecutor,BalanceAsyncRequestExecutor,DetailAsyncRequestExecutor ,这些线程不用再去写自己的唤醒等方法,可以直接继承自AsyncRequestExecutor  ,同时重写其抽象方法operationImpl(string data)实现自己具体的逻辑

 

第三步

建立AsyncRequestThread 类,构造函数中 调用super 传入group和 AsyncRequestExecutor 

 

第四步

为了使这几个线程不自动归属在系统线程组下,保障数据的安全,我们建立自己的线程组:建立一个AsyncRequestManager类来管理几个线程,将4个类型为AsyncRequestThread 的线程加在线程组中,同时写init 方法和stop方法以及putData方法,以便在上游请求的时候存放数据,同时根据类型唤醒对应的线程

 

 第五步

在监听器中contextInitialized的时候init线程,调用线程组的init方法,以及contextDestroyed关闭线程

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics