1

Thread.sleep() メソッドをテストしたいのですが、興味深いことがわかりました.. main() メソッドを呼び出すと、コンソールに「UserA sleep...」と「UserA waking...」が表示されます。プログラムは目覚めますが、junit メソッドを使用して main() メソッドと同じコードを実行すると、「UserA waking...」が出力されません ... 誰でも説明していただければ幸いです。

package com.lmh.threadlocal;

import org.junit.Test;

public class ThreadTest {

    public static void main(String [] args) {
        new Thread(new UserA()).start();
    }
    @Test
    public void testWakeup(){
        new Thread(new UserA()).start();
    }

}

class UserA implements Runnable{
    @Override
    public void run() {
        try {
            System.out.println("UserA sleeping...");
            Thread.sleep(1000);
            System.out.println("UserA waking...");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}
4

1 に答える 1

2

私の推測では、スリープが終了する前にテスト実行スレッドがテスト メソッドを終了するため、スリープが終了する前に JUnit がテストを破棄していると思われます。試す

@Test
public void testWakeup() throws Exception {
    Thread t = new Thread(new UserA());
    t.start();
    t.join();
}
于 2013-08-24T02:43:49.667 に答える