java并发框架有哪些

Python031

java并发框架有哪些,第1张

Java并发框架java.util.concurrent是JDK5中引入到标准库中的(采用的是Doug

Lea的并发库)。该包下的类可以分为这么块:

Executors

1)接口:

Executor(例子涉及):用来执行提交的Runnable任务的对象。是一个简单的标准化接口,用来定义包括线程池、异步IO、轻量级任务框架等等。任务可以由一个新创建的线程、一个已有任务执行线程、或是线程直接调用execute()来执行,可以串行也可并行执行,取决于使用的是哪个Executor具体类。

ExecutorService(例子涉及):Executor的子接口,提供了一个更加具体的异步任务执行框架:提供了管理结束的方法,以及能够产生Future以跟踪异步任务进程的方法。一个ExcutorService管理着任务队列和任务调度。

ScheduledExecutorService(例子涉及):ExecutorService的子接口,增加了对延迟和定期任务执行的支持。

Callable(例子涉及):一个返回结果或抛出异常的任务,实现类需要实现其中一个没有参数的叫做call的方法。Callabe类似于Runnable,但是Runnable不返回结果且不能抛出checked

exception。ExecutorService提供了安排Callable异步执行的方法。

Future(例子涉及):代表一个异步计算的结果(由于是并发执行,结果可以在一段时间后才计算完成,其名字可能也就是代表这个意思吧),提供了可判断执行是否完成以及取消执行的方法。

2)实现:

ThreadPoolExecutor和ScheduledThreadPoolExecutor:可配置线程池(后者具备延迟或定期调度功能)。

Executors(例子涉及):提供Executor、ExecutorService、ScheduledExecutorService、ThreadFactory以及Callable的工厂方法及工具方法。

FutureTask:对Future的实现

ExecutorCompletionService(例子涉及):帮助协调若干(成组)异步任务的处理。

Queues

非阻塞队列:ConcurrentLinkedQueue类提供了一个高效可伸缩线程安全非阻塞FIFO队列。

阻塞队列:BlockingQueue接口,有五个实现类:LinkedBlockingQueue(例子涉及)、ArrayBlockingQueue、SynchronousQueue、PriorityBlockingQueue和DelayQueue。他们对应了不同的应用环境:生产者/消费者、消息发送、并发任务、以及相关并发设计。

Timing

TimeUnit类(例子涉及):提供了多种时间粒度(包括纳秒)用以表述和控制基于超时的操作。

Synchronizers 提供特定用途同步语境

Semaphore(例子涉及):计数信号量,这是一种经典的并发工具。

CountDownLatch(例子涉及):简单的倒计数同步工具,可以让一个或多个线程等待直到另外一些线程中的一组操作处理完成。

CyclicBarrier(例子涉及):可重置的多路同步工具,可重复使用(CountDownLatch是不能重复使用的)。

Exchanger:允许两个线程在汇合点交换对象,在一些pipeline设计中非常有用。

Concurrent Collections

除队列外,该包还提供了一些为多线程上下文设计的集合实现:ConcurrentHashMap、CopyOnWriteArrayList及CopyOnWriteArraySet。

注意:"Concurrent"前缀的类有别于"synchronized"前缀的类。“concurrent”集合是线程安全的,不需要由单排斥锁控制的(无锁的)。以ConcurrentHashMap为例,允许任何数量的并发读及可调数量的并发写。“Synchronized”类则一般通过一个单锁来防止对集合的所有访问,开销大且伸缩性差。

分享10个最好的工具、框架和库,以帮助 Java 开发人员在不同的 Java 项目中更好地执行单元测试和集成测试。

▌JUnit

JUnit 应该不需要过多介绍。哪怕你是一位 Java 初学者,我想你也应该听说过它,它能够让你为 Java 代码编写单元测试。

几乎所有常用的 IDE,比如 Eclipse、NetBeans 和 IntelliJ,都能够集成 JUnit,这意味着开发者直接可以在这些 IDE 中编写并运行单元测试。

目前大多数人仍然在使用 JUnit 4,事实上新的 JUnit 5 已经发布。你可以用 JUnit 进行单元测试和集成测试,此外,它还支持 Java 8 功能。

▌REST Assured

相比于 Groovy 这类动态语言,在 Java 中测试和验证 REST 服务更难。

REST Assured 为 Java 带来了这些语言的简单性。这对于 REST API 集成测试来说是一个很好的工具。

▌Selenium

Selenium 应该是最受欢迎的 Java UI 测试工具,有了它,你不需要在浏览器中启动 JSP 页面即可对其进行测试。

你可以使用 JUnit 和 Selenium 来测试 Web 应用程序 UI。还可以使用它进行 Web 应用程序验收测试。

▌TestNG

TestNG 这款测试框架最早源于 JUnit 和 NUnit 的启发,但它在这两者的基础上引入了许多新的功能,其功能更强大,也更易于使用,提供了注解功能,支持在任意大型线程池中运行各种可用策略的测试(所有方法都在自己的线程中,每个测试类对应一个线程)。

随着 JUnit 4 中注解功能的引入以及 Hamcrest 框架的整合,JUnit 4 和 TestNG 之间的差距已经很小。

▌Mockito

Java 有许多 Mock 框架,例如 PowerMock 和 JMock,但我个人更喜欢 Mockito,它具有简单的 API、优秀的文档以及大量示例。

Mock 测试是现代单元测试的关键技术之一,开发者不需要依赖其他情况也可独立测试代码,因此我建议每个 Java 开发人员都应该学习 Mock 框架来与 JUnit 结合使用。

我个人最喜欢的 Mock 框架是 Mockito,如果你喜欢的话,也可以了解一下 PowerMock或者 JMock。

▌Spock 框架

Spock 是一款用于 Java 和 Groovy 应用程序的测试和规范框架。它用 Groovy 编写,因此它具有很强的表现力,并且非常规范。

使用 Spock 时,测试将变得更加易读易维护。此外,得益于它的 JUnit 运行器,Spock能够兼容大多数 IDE、构建工具和持续集成服务器。

不过遗憾的是,线上讲述 Spock 框架的课程好像不多,“使用 Spock 进行 Java 测试”这本书倒是一个不错的学习资源。

▌Cucumber

Cucumber 是一款很好的自动化集成测试工具,与其他同类工具相比,它的规范功能是一大特色。

Cucumber 将规范和测试文档合并为一个文档,由于文档也会被 Cucumber 自动测试,因此规范文档始终会被更新为最新版本。

▌Spring 测试

Spring MVC 自带了一个非常有用的测试框架,可以在不涉及 Web 容器的情况下进行深入测试。

这个是一个非常有用的库,可以为 Spring 应用程序编写自动化测试。它为 Spring 应用程序(包括 MVC 控制器)编写单元和集成测试提供了强有力的支持。

还有一个 Spring Test DbUnit,它将 Spring 测试框架与 DbUnit 以及 HtmlUnit 集成在了一起。

使用这些工具,你可以轻松完成 Spring MVC 应用程序的自动化测试。

▌DBUnit

对于大多数的 Java 应用程序,不管是核心 Java 程序还是 Java Web 应用,数据库都是其不可或缺的重要组成部分,并且数据库还很可能是单元测试的最大障碍。

连接到 Dev 或者 UAT 数据库进行集成测试是不可靠的,因为任何人都可以更改数据和模式,比如表和存储过程,这都会导致自动化集成测试的失败。

DbUnit 是 JUnit 的扩展,在每次集成测试之前它可以将数据库初始化为已知状态,从而确保数据库包含正确的数据。

DbUnit 是一个非常有用的工具,它可以帮助我们将测试数据和测试代码分开。

▌Robot 框架

Robot 框架是一个基于 Python 的通用自动化测试框架,主要用于验收测试以及验收测试驱动开发。

它采用表格测试数据语法,是一个关键字驱动的测试框架。分布式异构应用程序的验证往往需要多种技术和接口,非常适合用 Robot 来测试。

基本上是Quartz。我见过所有的项目都是用的Quartz

Quartz支持Cron表达式定义时间点也支持SimpleTrigger对应时间点,可以很精确的定义时间点。

Quartz支持集群,可以在多个服务器(连同一个数据库)自动分配到不同的服务器上执行。

Quartz支持多种错误处理形式(如错误后下次不执行、马上重新执行、下次继续执行等)

Quartz支持多种漏触发处理(如关机漏触发情况)

Quartz还有很多优点,同类框架基本和他没有可比性