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 - Fatal编程技术网

Java 有人能解释一下这段代码吗?它与线程有关

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

我无法理解控件是如何从“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:
控件如何从“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
不是线程安全的-在极少数情况下,您的输出可能不正确