【问题标题】:Adjust context switch frequency in Java on Linux在 Linux 上调整 Java 中的上下文切换频率
【发布时间】:2016-08-24 08:39:12
【问题描述】:

我正在研究一些二进制 Java 代码中的潜在并发问题。代码有时会出现奇怪的行为,但我不确定这是否真的是由于代码本身的并发问题,还是其他原因。我自己无法重现这种奇怪的行为,但只能在我们的日志文件中看到它发生。

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

【问题讨论】:

    标签: java linux multithreading debugging


    【解决方案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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      相关资源
      最近更新 更多