使用线程以非连续顺序打印数组的内容

时间:2018-03-13 00:50:12

标签: java multithreading loops

无法以非同步方式打印数组内容时出错。我希望迭代并输出字母" A" ," B" ," C"从一个静态的字符串数组中以非顺序的方式使用Threads来打印循环。

这是我的代码:

public class ThreadWithExtends extends Thread {

    public ThreadWithExtends() {
        super();
    }

    public void run() {
        String[] arr = { "A", "B", "C" };
        int num = 10;
        try {
            for (int j = 0; j < num; j++) {
                for (int i = 0; i < arr.length; i++) {
                    sleep((int) (Math.random() * 1000));
                    System.out.print(arr[i] + " ");
                }
            }

        } catch (InterruptedException e) {
            System.out.println("Finished");
        }
    }
}

我的TestThread课程:

public class TestThread {

    public static void main(String args[]) {
        new ThreadWithExtends().start();
    }

}

我的输出:A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C

我想要的输出:C A B A B C B A C ..等,不像上面那样顺序。

1 个答案:

答案 0 :(得分:2)

实际上你并没有并行执行任何代码。您只创建了一个线程,它按顺序打印一些语句。你需要创建自己打印东西的三个线程,如下所示:

public class Printer extends Thread {
    private String mText;

    public Printer(String text) {
        mText = text;
    }

    @Override
    public void run() {
        int num = 1_000;
        for (int i = 0; i < num; i++) {
            System.out.print(mText + " ");
        }
    }
}

然后

public static void main(String args[]) {
    new Printer("A").start();
    new Printer("B").start();
    new Printer("C").start();
}

现在你有三个并行运行的线程。印刷品应该现在混合。

请注意,通常您不应关心调度程序如何调度线程。它试图优化并且运行良好。它可能有它为什么安排这种或那种方式的原因。如果要告知调度程序您的首选项,可以为线程分配优先级。