Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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,代码: public class ThreadTest { public static void main(String[] args) { MyImlementThread mit = new MyImlementThread(); Thread t = new Thread(mit); t.start(); t = new Thread(mit); t.start(); } } // MyIm

代码:

public class ThreadTest {
    public static void main(String[] args) {
        MyImlementThread mit = new MyImlementThread();
        Thread t = new Thread(mit);
        t.start();
        t = new Thread(mit);
        t.start();
    }
}


// MyImlementThread
class MyImlementThread implements Runnable {
    public void run() {
        System.out.println("This is implemented run() method");
    }
}

/*
Output
This is implemented run() method
This is implemented run() method
*/

这里发生的是主线程启动两个线程并退出。每个新线程都将一条消息写入stdout,然后结束。此时,因为所有非守护进程线程都已完成JVM退出

发布的代码很混乱,因为它定义了一个Runnable,但给了它一个以Thread结尾的名称

Thread对象与os级线程相关,在线程上调用start使传入的Runnable execute的run方法中的代码在与调用start的线程不同的线程上运行

Runnable定义了一个任务,但没有指定它如何运行。它可以传递到特定线程的构造函数中,或者提交给执行器,或者由当前线程运行

在这种情况下,声明的Runnable没有状态,没有声明实例变量。在这里,两个线程可以执行相同的Runnable而不会发生冲突,因为没有共享状态。写入控制台的printstream是同步的,因此线程写入的行一次写入一行,而不会混淆在一起