2016-08-24 128 views
4

我正在研究某些二进制Java代码中的潜在并发问题。代码有时会有一个奇怪的行为,但我不确定这是否是由于代码本身的并发问题,或者是否是其他原因。我自己无法再现这种奇怪的行为,但只能看到它发生在我们的日志文件中。用Linux在Java中调整上下文切换频率

有没有办法提高JVM的上下文切换频率,以便以更高的概率表示潜在的并发问题?最好不要在代码中显式插入对Thread :: yeild或Thread :: sleep的调用。

回答

1

我认为Thread-weaver测试框架可以帮助你。自从我尝试过它已经有一段时间了,但它确实允许您强制执行特定的时间安排。它也可以在两种方法之间进行大量交错测试的默认模式下运行。

这是一个简单的示例性测试(使用默认交织)

public class MyListTest { 
    private MyList<String> list; 

    @Test 
    public void testThreading() { 
     AnnotatedTestRunner runner = new AnnotatedTestRunner(); 
     // Run all Weaver tests in this class, using MyList as the Class Under Test. 
     runner.runTests(this.getClass(), MyList.class); 
    } 

    @ThreadedBefore 
    public void before() { 
     list = new MyList<>(); 
    } 

    @ThreadedMain 
    public void mainThread() { 
     list.putIfAbsent("A"); 
    } 

    @ThreadedSecondary 
    public void secondThread() { 
     list.putIfAbsent("A"); 
    } 

    @ThreadedAfter 
    public void after() { 
     assertThat(list).hasSize(1); 
    } 
}