由于项目中需要使用ArrayBlockingQueue方式的ThreadPoolExecutor,设置的有界队列上限为1000,由于java默认在线程数超过maximumPoolSize时会抛弃超过上限的请求,所以在某些压力较大情况下会出现丢弃较多请求的情况。所以如果能先把超过上限的请求序列化到某种存储介质上,然后按照先进先出一批批的提供给后面的工作线程,做一个类似“阀门”装置,那就比较好了。
目前这个组件已经开发完毕,目前开源地址是https://github.com/netcomm/sponge,它的基本介绍如下:
#使用方式跟普通的ThreadPoolExecutor没有任何差别,开发人员没有任何感觉。
#正常情况下请求都走内存,只有在超过阀值后,请求才会进行持久化,一旦持久化的请求都被消费后,重新进入内存模式。这极大的保证了性能和缓冲的平衡。
#在突发极大并发请求下,保证系统的稳定性为第一目标。
#能自动缓冲超过某个阀值的任务请求。
#缓冲持久化的方式灵活,可根据使用场景进行选择,如基于文件(系统吞吐量巨大)、数据库(系统吞吐量大)、redis(系统吞吐量巨大)、…。
#任务的请求处理顺序默认先进先出模式。
#实现原理简单,代码量少。
#默认实现基于文件的缓冲持久化模式。
#关键参数可调整。
功能虽小,但用途还是比较广的,理论上任何使用ThreadPoolExecutor的地方,都可以用它来替代。欢迎大家在实际项目中使用,有任何问题都请联系我或提交到github上。
分享到:
相关推荐
- 如果需要,可以考虑使用数据库或文件系统作为持久化存储,以防止系统重启后丢失未完成的任务。 6. **应用场合** Java实现的Spooling技术适用于任何需要大量I/O操作的场景,例如批量数据导入导出、文件分发、...
- **对象序列化**:介绍Serializable接口,理解对象持久化的概念。 7. **网络编程** - **套接字编程**:讲解Socket和ServerSocket的使用,实现客户端和服务端通信。 - **URL与URLConnection**:利用URL进行网络...
5. EJB容器管理:事务、安全、持久化等服务由容器提供。 四、代码与编程题 这部分通常涵盖实际编程问题,例如算法题、设计模式、优化问题等。可能涉及到排序算法(快速排序、归并排序)、搜索算法(二分查找)、...
- **对象序列化**:学习如何将对象持久化到磁盘,以及反序列化恢复对象。 5. **反射**: - **Class类**:通过Class对象获取类的信息,如构造器、方法和字段。 - **动态调用方法**:在运行时动态地创建对象并调用...
15. 对象序列化:理解如何将对象持久化到文件,以及反序列化恢复对象。 六、多线程 16. 线程基础:创建线程的两种方式——继承Thread类和实现Runnable接口。 17. 线程同步:理解synchronized关键字,wait()、notify...
在实际应用中,AsynWriter可以帮助提高日志记录、数据持久化、网络通信等场景的性能。使用异步输出框架可以避免主线程被长时间占用,改善用户体验,并且有助于系统的可扩展性和可维护性。不过,需要注意的是,异步...
- **对象序列化与反序列化**:ObjectInputStream和ObjectOutputStream允许我们将Java对象持久化到磁盘或网络上。 2. **Java 多线程**: - **线程的创建**:可以通过实现Runnable接口或继承Thread类来创建线程。 ...
3. 对象流:ObjectInputStream和ObjectOutputStream允许我们将Java对象序列化和反序列化,从而实现对象的持久化存储或网络传输。 4. 转换流:InputStreamReader和OutputStreamWriter用于在字节流与字符流之间转换,...
- 分布式缓存:Redis的使用,包括数据类型、持久化、主从复制等。 - 分布式消息队列:RabbitMQ或Kafka的使用,理解消息队列在系统解耦中的作用。 - 分布式锁:Zookeeper或RedLock实现分布式锁的原理。 以上内容...
- 对象序列化:将对象转换为字节流,持久化存储或网络传输。 - IO流的缓冲区和缓冲区流:提高数据传输效率。 6. **多线程** - 创建线程:通过实现Runnable接口或继承Thread类。 - 线程同步:synchronized关键字...
4.3 对象序列化:了解Serializable接口,实现对象的持久化存储,以及使用ObjectInputStream和ObjectOutputStream进行对象的序列化和反序列化。 五、多线程 5.1 线程基础知识:理解线程的概念,学习Thread类的使用,...
- 对象序列化:理解如何将对象持久化到磁盘,以及反序列化回内存。 4. **多线程** - 线程基础:创建和管理线程,理解线程同步和通信机制。 - 线程池:使用ExecutorService和ThreadPoolExecutor实现高效的线程...
3. **对象序列化**:通过实现Serializable接口,可以将对象转化为字节流,便于持久化或网络传输。 五、多线程 1. **线程的创建**:通过Thread类或实现Runnable接口创建线程。 2. **线程同步**:synchronized...
- **对象序列化与反序列化**: 理解如何将对象持久化到磁盘,以及如何恢复这些对象。 5. **集合框架** - **ArrayList与LinkedList**: 比较这两种动态数组的实现,以及它们在不同场景下的性能表现。 - **Set与Map*...
- 持久化:RDB、AOF、混合持久化。 - 高可用:主从复制、哨兵系统、Cluster集群。 - 集群与分布式:一致性哈希、槽分区。 9. **微服务**: - 分布式服务治理:服务注册与发现、服务调用、熔断、降级、限流。 -...
- 对象序列化:实现Serializable接口进行对象持久化。 7. **反射** - 获取类信息:Class类的使用,如获取类名、构造器、方法等。 - 动态调用方法和访问字段:Method和Field类的应用。 - 创建对象:newInstance...
- **对象序列化**:学习如何将对象持久化到磁盘。 6. **多线程**: - **线程创建**:通过Thread类和Runnable接口两种方式创建线程。 - **同步机制**:理解synchronized关键字和wait/notify机制。 - **线程池**...
- JPA与Hibernate:学习ORM(对象关系映射)技术,理解实体类和持久化过程。 - JDBC:理解数据库连接池,熟悉Statement和PreparedStatement的使用。 7. **其他** - IO流:了解字节流、字符流、缓冲流、对象序列...
4. ObjectInputStream/ObjectOutputStream:理解序列化和反序列化的概念,用于对象的持久化存储。 五、多线程 1. 创建线程:了解Thread类的使用和实现Runnable接口的方式。 2. 线程同步:理解synchronized关键字...
- 对象序列化:Serializable接口,对象的持久化存储。 6. **集合框架**: - List、Set和Queue接口:ArrayList、LinkedList、HashSet、TreeSet、LinkedList等实现类。 - Map接口:HashMap、TreeMap、Hashtable等...