多线程情况下单元测试碰到的问题
记录个问题,有时间再去解决
关于面试题 “两个线程交替打印奇偶数”:
如果使用 main方法调用,可以正确打印。 如果使用单元测试,打印出来的数字不确定。
public class Mytest { private Integer count = 0; private final Object lock = new Object(); public static void main(String[] args) throws InterruptedException { Mytest mytest = new Mytest(); mytest.printing(); } @Test public void printing() { Thread even = new Thread(() -> { while (count <= 100) { synchronized (lock) { System.out.println(count); count++; lock.notifyAll(); if (count <= 100) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } }); Thread odd = new Thread(() -> { while (count <= 100) { synchronized (lock) { System.out.println(count); count++; lock.notifyAll(); if (count <= 100) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } }); even.start(); odd.start(); } }
目测这个应该是和junit的实现有关,先记录下问题,有时间再研究。