加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 23:28:40 所属栏目:Linux 来源:网络整理
导读:我正在研究一些二进制 Java代码中的潜在并发问题.代码有时会有一个奇怪的行为,但我不确定它是否真的是由于代码本身的并发问题,或者它是否是其他东西.我自己无法重现这种奇怪的行为,但只看到它发生在我们的日志文件中. 有没有办法提高JVM的上下文切换频率,以
我正在研究一些二进制 Java代码中的潜在并发问题.代码有时会有一个奇怪的行为,但我不确定它是否真的是由于代码本身的并发问题,或者它是否是其他东西.我自己无法重现这种奇怪的行为,但只看到它发生在我们的日志文件中.

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

解决方法

我认为 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);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读