前言,在支付系统项目中,运用了一些多线程的任务,现在此记录学习一下,以备以后运用到,同时自己也理一下逻辑思想。
在项目中有这样几个需求,需要接受项目组中上游项目传送过来的数据请求,请求包括了支付,同步,余额,明细大体四个分支。在项目中因为上游是通过传送特定的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关闭线程
相关推荐
3. **类**:类是Java中的核心构造,用于封装数据和行为。类定义包括类名、超类(如果有的话)和接口(如果实现的话)。类的理解和创建是面向对象编程的基础。 4. **变量与常量**:变量用于存储数据,分为实例变量和...
从这些心得中,我们可以提炼出一些关键的Java编程知识点。 首先,面向对象编程(OOP)是Java的核心概念。"Everything is an object",即万物皆对象,意味着每个实体都可以被封装成一个对象,包含了处理该实体所需的...
6. **多线程**:Java支持多线程编程,可以创建和管理多个执行线程,理解同步机制(如synchronized关键字、wait()、notify())和并发工具类(如ExecutorService、Semaphore、CyclicBarrier)。 7. **网络编程**:...
37. **java中实现多态的机制是什么?** - Java通过方法覆盖和方法重载实现多态性。 38. **垃圾回收器的基本原理是什么?** - 跟踪对象的可达性,不可达的对象被视为垃圾并被回收。 39. **静态变量和实例变量的...
在Java中,你可以通过以下代码实现: ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` 保存为HelloWorld.java文件,然后用javac编译...
- 平台无关性:通过Java虚拟机(JVM)实现了跨平台运行的能力。 - 自动垃圾回收:减少了内存管理错误。 - **基本语法**: - 数据类型:整型(int, long等)、浮点型(float, double)、字符型(char)、布尔型(boolean...
Java程序设计的面试题涵盖了多个核心领域,旨在...这些面试题旨在全面评估Java程序员的基础知识、并发编程、类库使用、优化思维以及对版本控制和日志管理的理解。掌握这些知识点对于成为一名优秀的Java开发者至关重要。
6. **数组与集合**:Java提供了丰富的数据结构,如数组、ArrayList、LinkedList、HashMap等,理解它们的特性并熟练运用是提高编程效率的重要一环。 7. **异常处理**:Java的异常处理机制是通过try-catch-finally...
- **依赖注入(DI)**:通过构造器注入、设值注入等方式实现。 - **面向切面编程(AOP)**:通过代理模式实现横切关注点与业务逻辑的分离。 #### Hibernate与MyBatis - **Hibernate**:全自动ORM框架,提供对象...
- 加入讨论组:与其他考生交流经验,分享学习心得,解答疑惑。 - 定期复习:避免临时抱佛脚,定期回顾和测试自己的知识。 4. **考试格式** - SCJP/OCP考试是选择题形式,通常包含70-80道题,时长为150分钟。 - ...
为能和大家能共同探讨"设计模式",我将自己在学习中的心得写下来,只是想帮助更多人更容易理解 GoF 的《设计模式》。由 于原著都是以C++为例, 以Java为例的设计模式基本又都以图形应用为例,而我们更关心Java在中间件等...