Java 在启动新线程之前自动等待线程完成

标签 java eclipse multithreading output

使用以下代码:

package myapp;

class Runner extends Thread {
    public void run(){
        for(int i = 0; i < 11; i++){
            System.out.println("Hello " + i);
        }

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

public class Class1 {
    public static void main(String[] args){
        Runner t1 = new Runner();
        t1.start();

        Runner t2 = new Runner();
        t2.start();
    }
}

我得到以下输出:

Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9
Hello 10
Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9
Hello 10

而我的输出应该如下:

Hello 0
Hello 0
Hello 1
Hello 1
Hello 2
Hello 2
Hello 3
Hello 3
Hello 4
Hello 4
Hello 5
Hello 5
Hello 6
Hello 6
Hello 7
Hello 7
Hello 8
Hello 8
Hello 9
Hello 9
Hello 10
Hello 10

怎么了?我使用的是 Eclipse 标准/SDK 版本:Kepler Release
Build id:20130614-0229、jre7u25 和 jdk7u25。

最佳答案

这是你的问题:

    for(int i = 0; i < 11; i++){
        System.out.println("Hello " + i);
    }

    try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

您首先运行整个循环,然后才 sleep 。将 sleep 移到 for 循环中,看看会发生什么。

关于Java 在启动新线程之前自动等待线程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18035921/

相关文章:

eclipse - 如何使应用程序适用于任何 Java 版本?

c# - 一键访问两个线程功能

java - 我看不到框架内的组件

java - 将小部件添加到 map 会破坏 GWT 中的其他小部件

eclipse - 在 Eclipse 3.5(以及 Aptana 插件)中,如何获取可用于显示我的项目(包括 "dot"文件)的 View ?

java - MongoDB 身份验证失败

java - 如何编写类似于现有查找/替换对话框的 Eclipse 插件

java - Java EE 7-ManagedThreadFactory可能的限制

java - hibernatespatial 版本 4 的 Maven 存储库是否已关闭?

java - 如何在 android 中使用 autocompleteTextView 执行 Trie 搜索?