多线程:程序创建 10 个线程并调用方法 print thread 确保此方法的输出不会相互中断

Multi-threading: Program create 10 threads and calls method print thread make sure the output of this method do not interrupt each other

上面的程序通过调用 wait()join() 来工作。你能告诉我应该使用哪种方法吗?或者有没有更好的方法来编写这个程序。提前致谢:) 对于 thread.wait() 我在调用 t.start().

之前创建了一个同步块
public class DisplayThread {

    public synchronized void printThread(int threadNumber){
        System.out.println("I am thread number: " + threadNumber);

    }
}


public class Thread1 extends Thread {

    DisplayThread d;
    int num;

    Thread1(DisplayThread d, int num) {
        this.d = d;
        this.num = num;
    }

    public void run() {
        d.printThread(num);
    }

    public static void main(String[] args) {

        DisplayThread d = new DisplayThread();
        Thread[] t = new Thread[10];

        for (int i = 0; i < 10; i++) {
            t[i] = new Thread1(d, i);
            t[i].start();
            try {
                t[i].join();  **//t[i].wait(1000) also works fine**
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

}

Can you tell me which method I should use?

您只需要使用 join() 方法,通过该方法告诉 main 线程不要启动(即 t[i].start() 行)迭代中的下一个线程。如果您不使用 join(),main 线程也会 运行 并行并启动其他线程。

此外,wait()notify() 旨在解决不同的问题,即 producer/consumer 问题,我建议您查看 here 以了解此概念的工作原理。

如果您的目标是同时执行 10 个 Thread,则需要将 Thread#join 调用移出初始循环。

for (int i = 0; i < 10; i++) {
    t[i] = new Thread1(d, i);
    t[i].start();
}

for (int i = 0; i < 10; i++) {
    try {
        t[i].join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

除此之外,我觉得一切都很好!