我最近不得不完成其中一个工作面试编码练习。基本上,它需要实现一个消息队列类:
最后,我所做的是实现一个MessageQueue类,该类在内部使用并发SkipListMap(一个并发和有序的映射)来保存消息。
我还实现了一个基本的JUnit测试用例,用于测试基本的业务需求。
现在,由于它是一个消息队列,因此消息可以同时进入,当然,我需要测试实现中出现的方面。
我现在越来越接近问题的核心了。
我的想法是,当单个线程与实现交互时,基本JUnit测试用例应该验证代码是否有效。
然后我实现了一个并发测试用例,它应该验证实现的并发方面。
现在的问题是:我应该测试哪些并发方面?
我唯一能想到的是有多个生产者线程在队列中注入方法,有多个消费者线程删除消息(通过getFron())。这里要验证的是,队列中的任何消息最终都会出来。
但这足够了吗?这里还可以测试哪些并发方面?
另外值得注意的是,我已经提交了解决方案,所以无论你提出什么建议,都不会对我申请这份工作的机会产生任何影响。
测试线程安全是一个痛苦的过程,因为你基本上是在试图证明你的程序对于每一个最终的并发执行的正确性。有几种html" target="_blank">方法可以解决这个问题:
>
用JMM的术语正式证明你的程序的正确性。这将要求您讨论程序中每个明确的“之前发生”的边缘,以及如何基于这些边缘保持一致性。这对于队列这样的基本功能是可能的,但随着功能和边缘的增加,它变得非常复杂。我建议您无论如何都要经历这个过程,并在编写并发代码时记录您的意图/假设。
通过使用倒计时锁存或在程序中的特定点暂停执行线程以强制争用的其他方法,构造测试用例,以演示上述行为。这可能会把你的代码变成一个可怕的烂摊子,如果走得太远,但可以是一个非常有用的技术。
通过在足够的时间内练习代码来统计证明正确性。这是并发折磨套件背后的原则,用于验证JVM实现对JMM的正确性。这将要求您对参与线程的合法/非法状态形成期望,并在具有足够并行线程的机器上运行程序足够长的时间。如果你从来没有击中一个非法的状态,你的程序是正确的:)。如果你运行了足够长的时间而没有达到非法状态,那么你很可能是正确的。
我需要使用Jmeter对一个有100个并发用户的网站进行负载测试,我创建了这样的测试计划-
由来 很多时候,我们需要简单模拟N个线程调用某个业务测试其并发状况,于是Hutool提供了一个简单的并发测试类——ConcurrencyTester。 使用 ConcurrencyTester tester = ThreadUtil.concurrencyTest(100, () -> { // 测试的逻辑内容 long delay = RandomUtil.randomLong(
问题内容: 也许这是一个愚蠢的问题,但我似乎找不到一个明显的答案。 我需要一个仅包含唯一值的并发FIFO队列。尝试添加队列中已经存在的值只会忽略该值。如果不是为了线程安全,那将是微不足道的。在Java中是否存在数据结构,或者在Interweb上是否存在代码snipit表现出这种行为? 问题答案: 如果您想要比完全同步更好的并发性,那么我知道有一种方法可以使用ConcurrentHashMap作为支
我正在尝试使用TestNg并行运行测试。我有3个类(两个扩展了BaseTest类的测试类) BaseTest类只有“设置”和“拆卸”,没有其他东西。 当我尝试像这样并行运行测试时,一个带有测试的类运行,而另一个类只打开一个浏览器(但不执行测试) 但是当我从BaseTest类中剪切代码并将其直接放到我的每个测试类中(因此不扩展BaseTClass)时,代码工作,测试并行运行 为什么?我根本没有做任何
本文向大家介绍IOS开发-多线程队列测试代码,包括了IOS开发-多线程队列测试代码的使用技巧和注意事项,需要的朋友参考一下 直接贴测试代码了。 当前考虑的问题: 1.队列有多少个消费者 2.添加到队列的新task是同步运行(当前线程阻塞)还是异步(当前线程不阻塞) 3.多个队列之间的调度(此文章未涉及)
我有一个Java项目,它使用了一些Azure函数,如HttpTrigger和QueueTrigger。我使用原型来生成这个项目,因此它可以使用HttpTrigger的一些样板代码和它的单元测试,但对QueueTrigger没有任何帮助。我正试图得到帮助,为这个QueueTrigger编写一个好的单元测试,它实际上是从队列中读取消息(弹出)。队列的代码如下所示: 有没有人能推荐一下这个队列触发azu