Java 有人能解释一下这段代码吗?它与线程有关
我无法理解控件是如何从“Expl-Thread”输出语句转移到“Main-Thread”输出语句的Java 有人能解释一下这段代码吗?它与线程有关,java,multithreading,Java,Multithreading,我无法理解控件是如何从“Expl-Thread”输出语句转移到“Main-Thread”输出语句的 package com.myjava.threads; class MyRunnableThread implements Runnable { public static int myCount = 0; public MyRunnableThread() { } public void run() { while (MyRunnableTh
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:
控件如何从“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:
控制权未被传递。相反,每个线程都在调用
Thread.sleep(100);
由于这是相同的时间,它们轮流进行。将其中一个更改为
sleep(50)
,您将看到其中一个以两倍的速度打印消息。没有传输的控件。。。线程每100毫秒独立打印到控制台。既然时间是一样的,那么它们似乎是“轮流”的,但哪一个“先走”是不确定的
改变一个
线程睡眠(100)代码>值,您将看到其中一个打印时间比另一个长/短 这是线程调度程序决定的。启动线程时,它将与已经存在的其他线程并行运行。由线程调度程序决定分配给每个线程的顺序和时间
执行顺序没有保证 请正确设置代码格式-没有任何缩进,阅读起来非常困难。请注意,++MyRunnableThread.myCount
不是线程安全的-在极少数情况下,您的输出可能不正确