首页 » 科技 » Java谜题选 - III

Java谜题选 - III

题目3:看谁跑得快的数字... 译者序:其实这个程序和单元测试无关,更多的是并发的问题。但需要了解assertEquals方法的使用。 程序 public class Test extends junit.framework.TestCase{     int number;     public void test() throws InterruptedException{        number = 0;        Thread t = new Thread(new Runnable() {           public void run() {              assertEquals(2, number);           }        });        number = 1;  .....

题目3:看谁跑得快的数字...

译者序:其实这个程序和单元测试无关,更多的是并发的问题。但需要了解assertEquals方法的使用。

程序

public class Test extends junit.framework.TestCase{
    int number;

    public void test() throws InterruptedException{
       number = 0;
       Thread t = new Thread(new Runnable() {
          public void run() {
             assertEquals(2, number);
          }
       });
       number = 1;
       t.start();
       number++;
       t.join();
    }
}

答案

(a) assertEquals永远错
(b) assertEquals有时对
(c) assertEquals永远对
(d)程序进入锁死状态

请大家想想,踊跃发表意见。答案和分析之后发布。请不要上机运行后,再来说答案,谢谢。

【本文翻译仅为外语学习及阅读目的,原文作者个人观点与译者及译言网无关】

0

返回正文评论

      是b呀。因为无法预知++先执行还是assert先执行,还有number没有正确的修饰,可能导致两个线程中看到的变量不一致。