java - 线程安全单元测试

标签 java multithreading unit-testing thread-safety

据我所知,单元测试线程安全性没有“好的”通用解决方案。但我想要一个针对特定问题的良好解决方案。

让我们考虑这个(虚拟)动态列表实现。 add 方法显然不是线程安全的。由于使其线程安全是非常明显的(让我们考虑一下我们不会实现任何 remove 方法并保持其虚拟),如何对这段代码进行单元测试以显示它是< em>实际上不是线程安全的,并表明线程安全修复实际上有效(或似乎有效)?

public class ArrayList {

    private int capacity = 2;
    private Object[] content = new Object[capacity];
    private int size;

    public void add(Object object) {
        if (size == capacity) {
            ensureCapacity();
        }
        content[size++] = object;
    }

    public Object get(int index) {
        if (index >= size) {
            throw new IndexOutOfBoundsException();
        }
        return content[index];
    }

    private void ensureCapacity() {
        int extendedCapacity = capacity * 2;
        Object[] extended = new Object[extendedCapacity];

        System.arraycopy(content, 0, extended, 0, size);

        this.capacity = extendedCapacity;
        this.content = extended;
    }
}

最佳答案

您可以尝试一些实用程序,例如 jcstress http://openjdk.java.net/projects/code-tools/jcstress/或织线工https://github.com/google/thread-weaver谁将检测您的字节代码并为您的实现生成压力测试。

关于java - 线程安全单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921959/

相关文章:

java - 为什么JavaFX不能用.jar文件打包?

java - 如何迭代和修改 Java 集?

java - 如何在 Guice 中为变量设置默认值

multithreading - delphi中如何释放线程

unit-testing - 如何对调用其他成员函数(C# 或 Java)的函数进行单元测试?

unit-testing - 动态创建测试列表

java - 2 个提交按钮 - 不同的查询,

c - 发送信号后,waitpid停止等待

java - LWJGL - 如何使用第二个线程加载纹理

java - 用 Mockito 注入(inject)模拟不起作用