【问题标题】:Printing contents of an array in a non-sequential order using threads使用线程以非顺序顺序打印数组的内容
【发布时间】:2018-03-13 00:50:12
【问题描述】:

无法以非同步方式打印我的数组的内容。我希望使用 Threads 从静态字符串数组中以非顺序方式迭代并输出字母 "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");
        }
    }
}

我的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 .. 等,不像上面那样连续。

【问题讨论】:

  • 你有一个线程在做顺序工作......
  • 为什么?为什么人们想要线程不确定的东西?它们对于日常使用不是确定性的。它们在内心深处是确定性的。为什么要关心?
  • 虽然创建了一个线程,但它仍然是一个线程。在运行内部,它只不过是顺序执行流程。你需要的是在主线程上有你的 for 循环,并创建多个线程来迭代和打印结果。

标签: java multithreading loops


【解决方案1】:

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

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();
}

现在您有了三个并行运行的线程。现在应该混合打印。


请注意,通常您不应该关心调度程序如何调度线程。它试图优化并且效果很好。它可能有它为什么安排这样或那样的原因。如果您想告诉调度程序您的偏好,您可以为线程分配优先级。

【讨论】:

  • 感谢您的意见,谢谢。
  • 输出可能不会混合@averageCoder。仅仅因为你有多个线程并不意味着你会得到交错的输出,当然也不会是完美的交错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多