无法以非同步方式打印数组内容时出错。我希望迭代并输出字母" 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 ..
等,不像上面那样顺序。
答案 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();
}
现在你有三个并行运行的线程。印刷品应该现在混合。
请注意,通常您不应关心调度程序如何调度线程。它试图优化并且运行良好。它可能有它为什么安排这种或那种方式的原因。如果要告知调度程序您的首选项,可以为线程分配优先级。