Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Linux上调整Java中的上下文切换频率_Java_Linux_Multithreading_Debugging - Fatal编程技术网

在Linux上调整Java中的上下文切换频率

在Linux上调整Java中的上下文切换频率,java,linux,multithreading,debugging,Java,Linux,Multithreading,Debugging,我正在研究一些二进制Java代码中潜在的并发性问题。代码有时会有一种奇怪的行为,但我不确定这到底是由于代码本身的并发性问题造成的,还是其他原因造成的。我自己还没能重现这种奇怪的行为,只是在我们的日志文件中看到了这种情况 有没有办法提高JVM的上下文切换频率,以便以更高的概率解决潜在的并发问题?最好不要在代码中显式插入对Thread::yeild或Thread::sleep的调用。我认为测试框架可以帮助您。我已经有一段时间没有尝试过它了,但它确实允许您强制执行特定的计划。它也可以在一种默认模式下运

我正在研究一些二进制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);
    }
}