在Linux上调整Java中的上下文切换频率
我正在研究一些二进制Java代码中潜在的并发性问题。代码有时会有一种奇怪的行为,但我不确定这到底是由于代码本身的并发性问题造成的,还是其他原因造成的。我自己还没能重现这种奇怪的行为,只是在我们的日志文件中看到了这种情况 有没有办法提高JVM的上下文切换频率,以便以更高的概率解决潜在的并发问题?最好不要在代码中显式插入对Thread::yeild或Thread::sleep的调用。我认为测试框架可以帮助您。我已经有一段时间没有尝试过它了,但它确实允许您强制执行特定的计划。它也可以在一种默认模式下运行,其中测试了两个方法之间的大量交错 这是一个简单的示例测试(使用默认交错)在Linux上调整Java中的上下文切换频率,java,linux,multithreading,debugging,Java,Linux,Multithreading,Debugging,我正在研究一些二进制Java代码中潜在的并发性问题。代码有时会有一种奇怪的行为,但我不确定这到底是由于代码本身的并发性问题造成的,还是其他原因造成的。我自己还没能重现这种奇怪的行为,只是在我们的日志文件中看到了这种情况 有没有办法提高JVM的上下文切换频率,以便以更高的概率解决潜在的并发问题?最好不要在代码中显式插入对Thread::yeild或Thread::sleep的调用。我认为测试框架可以帮助您。我已经有一段时间没有尝试过它了,但它确实允许您强制执行特定的计划。它也可以在一种默认模式下运
公共类MyListTest{
私人名单;
@试验
公共void testThreading(){
AnnotatedTestRunner runner=新的AnnotatedTestRunner();
//运行该类中的所有Weaver测试,使用MyList作为被测试的类。
runner.runTests(this.getClass(),MyList.class);
}
@以前穿的
在()之前公开无效{
列表=新的MyList();
}
@螺纹主
公共void主线程(){
列表。putIfAbsent(“A”);
}
@螺纹次级
public void secondThread(){
列表。putIfAbsent(“A”);
}
@穿线后
在()之后公共无效{
资产(列表).hasSize(1);
}
}
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);
}
}