有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程java线程。join未按预期工作

我有以下课程

class ThreadDemo extends Thread {
    private Thread t;
    private String threadName;

    ThreadDemo( String name) {
        threadName = name;
    }

    public void run() {
        for(int i = 5; i > 0; i--) {
            System.out.println("Thread " +  threadName + " Counter   ---   "  + i );
        }

        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            System.out.println("Sleep issue");
        }

        System.out.println("Finishing run");

        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            System.out.println("Sleep issue");
        }
    }

    public void start () {
        t = new Thread (this, threadName);
        t.start ();
    }
}

测试如下

public class Main {
    public static void main(String[] args) {
        ThreadDemo T1 = new ThreadDemo( "Thread - 1 ");
        ThreadDemo T2 = new ThreadDemo( "Thread - 2 ");
        T1.start();
        T2.start();

        //Let's give some time for threads to run
        try {
            Thread.sleep(10);
        } catch (Exception e) {
            System.out.println("Main sleep issue");
        }

        try {
            T1.join();
            T2.join();
        } catch ( Exception e) {
            System.out.println("Interrupted");
        }

        System.out.println("Finishing main.");
    }
}

尽管我使用了T1,为什么我总是在输出中的“Finishing run”之前得到“Finishing main”。join()和T2。join()等待他们完成?起初我认为这可能是由于缓冲区延迟,所以我添加了线程。在跑步结束时睡眠(1000)以便有时间打印“Finishing run”,但这没有帮助。我猜这是由于第一次出现的线程。睡眠(1000)(当我移除它时,它工作正常),但不知道为什么


共 (0) 个答案