有人可以解释这个代码,它与线程相关
问题描述:
我无法理解控件是如何从“Expl Thread”输出语句转移到“Main Thread”输出语句的。有人可以解释这个代码,它与线程相关
package com.myjava.threads;
class MyRunnableThread implements Runnable {
public static int myCount = 0;
public MyRunnableThread() {
}
public void run() {
while (MyRunnableThread.myCount <= 10) {
try {
System.out.println("Expl Thread: " + (++MyRunnableThread.myCount));
Thread.sleep(100);
} catch (InterruptedException iex) {
System.out.println("Exception in thread: " + iex.getMessage());
}
}
}
}
public class RunMyThread {
public static void main(String a[]) {
System.out.println("Starting Main Thread...");
MyRunnableThread mrt = new MyRunnableThread();
Thread t = new Thread(mrt);
t.start();
while (MyRunnableThread.myCount <= 10) {
try {
System.out.println("Main Thread: " + (++MyRunnableThread.myCount));
Thread.sleep(100);
} catch (InterruptedException iex) {
System.out.println("Exception in main thread: " + iex.getMessage());
}
}
System.out.println("End of Main Thread...");
}
}
The output is:
启动主线程...
Main Thread: 1
Expl Thread: 2
Main Thread: 3
Expl Thread: 4
Main Thread: 5
Expl Thread: 6
Main Thread: 7
Expl Thread: 8
Main Thread: 9
Expl Thread: 10
Main Thread: 11
End of Main Thread...
答
如何控制从 “EXPL主题” 输出语句传送到 “主线程” 输出语句。
控制不被传递。相反,每个线程呼叫
Thread.sleep(100);
而且,因为这是相同的时间量,他们轮流。将其中一个更改为sleep(50)
,您将看到一个打印消息的速度是其两倍。
答
没有控制权转移......线程每100毫秒独立地向控制台打印。由于时代是相同的,所以看起来他们“轮流”,但是“先走”并不是确定性的。
更改Thread.sleep(100);
值之一,您将看到一个将花费更长/更短的时间打印。
答
这是线程调度程序决定的事情。当你启动线程时,它将与已经存在的其他线程并行运行。它由线程调度器决定分配给每个线程的顺序和时间。
有无法保证执行顺序。
请格式化您的代码 - 没有任何缩进,它真的很难看。 –
请注意,'++ MyRunnableThread.myCount'不是线程安全的 - 在极少数情况下,您的输出可能不正确 – Numeron