译文

Java谜题选 - III

翻译:易晓斓 | 2007-09-14 01:13:42 | 阅读2433 | 来源

题目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)程序进入锁死状态

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

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

分享:

标签:Java,Puzzlers,并发,

本文共有4 条评论:

1楼 阿里吧 评论于 2007-10-08 18:26:29

请问你的 “Java谜题选”系列什么时候能出完?

2楼 易晓斓 评论于 2007-10-09 13:13:41

已经不耐烦了吗? :-)

3楼 阿里吧 评论于 2007-10-30 12:32:27

是啊,呵呵

也许会自己找原文看了。

4楼 TigerF 评论于 2008-03-06 10:43:02

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

添加评论