首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程:程序创建10个线程并调用方法打印线程,确保此方法的输出不相互中断。

多线程:程序创建10个线程并调用方法打印线程,确保此方法的输出不相互中断。
EN

Stack Overflow用户
提问于 2017-04-15 18:43:17
回答 2查看 984关注 0票数 0

上面的prog通过调用wait()join()来工作。你能告诉我我应该用哪种方法吗?或者是否有更好的方法提前编写这个程序.Thanks :)对于thread.wait(),我在调用t.start()之前创建一个同步块。

代码语言:javascript
复制
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();
            }

        }

    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-15 18:53:54

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

代码语言:javascript
复制
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();
    }
}

除此之外,在我看来一切都很好!

票数 0
EN

Stack Overflow用户

发布于 2017-04-15 18:51:09

你能告诉我该用哪种方法吗?

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

另外,wait()notify()旨在解决另一个问题,即生产者/消费者问题,我建议您看看这里来了解这个概念是如何工作的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43429892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档