Java - Thread join() 和执行顺序 SCJP 问题?

标签 java multithreading scjp

我一直在为我的 O/SCJP 考试做一些练习。考虑以下代码:

public class Cruiser implements Runnable {
    public static void main(String[] args) throws InterruptedException {
        Thread a = new Thread(new Cruiser());
        a.start();

        System.out.print("Begin");
        a.join();
        System.out.print("End");
    }

    public void run() {
        System.out.print("Run");
    }
}

来源:http://scjptest.com/mock-test.xhtml

网站声明输出(他们的模拟问题的答案)将是 BeginRunEnd,并且当正常运行类(class)时,这正是输出。

但是,调试时输出为 RunBeginEnd

可以公平地说,在正常执行下,输出总是BeginRunEnd,还是会因其他因素(例如新线程类有多重/启动线程后需要多长时间才能加入它)?

您认为这是一道公平/准确的试题吗?

最佳答案

我认为 BeginRunEnd 比 RunBeginEnd 更有可能(我预计实际启动新线程的行为需要一段时间才能到达 run 方法,并且在大多数情况下第一个线程在它的时间片用完之前到达打印),但是在编程时假设这一点是完全不正确的

一旦 start 被调用,您就应该将这两个线程视为完全独立的,直到它们通过 join 调用再次显式绑定(bind)在一起。从逻辑上讲,新线程可以在主线程打印“开始”之前一直运行到完成。

在我看来这是个糟糕的问题。

关于Java - Thread join() 和执行顺序 SCJP 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6874420/

相关文章:

java - 判断当前线程是否持有 Java `Lock`

java - id = 1 - id 是原子的吗?

java - SCJP 书,IO 部分 : Is this a typo or is there a reason it would look like this?

java - java代码的免费地理定位ip服务

java - 需要 GPath 查询来查找最大日期 + 字符串字段

java - 如何将图片添加到 javaFX 2.0 netbeans 项目

java - x = x++ 不会递增,因为++ 是在赋值后应用的?

java - 如何删除单词周围的字符?

c - 使用 free() 时内存使用量不会减少

java - 连接被拒绝 - Java 客户端/服务器