Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用线程按非顺序打印数组内容_Java_Multithreading_Loops - Fatal编程技术网

Java 使用线程按非顺序打印数组内容

Java 使用线程按非顺序打印数组内容,java,multithreading,loops,Java,Multithreading,Loops,无法以非同步方式打印阵列的内容。我希望使用线程打印循环,从静态字符串数组中以非顺序的方式遍历并输出字母“A”、“B”、“C” 这是我的密码: public class ThreadWithExtends extends Thread { public ThreadWithExtends() { super(); } public void run() { String[] arr = { "A", "B", "C" };

无法以非同步方式打印阵列的内容。我希望使用线程打印循环,从静态字符串数组中以非顺序的方式遍历并输出字母“A”、“B”、“C”

这是我的密码:

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");
        }
    }
}
我的输出:
A B C A B C A B C A B C A B C A B C A B C A B B C A B C


我想要的输出:
cababcaac..
etc,不像上面那样顺序

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

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 + " ");
        }
    }
}
现在有三个线程并行运行。现在应该混合指纹了



注意,一般来说,您不应该关心调度程序如何调度线程。它尝试进行优化,效果良好。它可能有它的原因,为什么它安排这样或那样。如果您想告诉调度程序您的首选项,您可以为线程分配优先级。

您有一个线程在连续工作……为什么?为什么人们想要线程不确定性的东西?它们不是每天都可以使用的。它们在内心深处的某个地方是确定的。为什么要在意?虽然已经创建了一个线程,但它仍然是一个线程。在运行中,它只不过是顺序执行流。您需要的是在主线程上创建for循环,并创建多个线程来迭代和打印结果。感谢您的输入,请欣赏。输出可能不会与@averageCoder混合。仅仅因为您有多个线程,并不意味着您将获得交错输出,当然它也不会完全交错。
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();
}