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是同步的,因此线程写入的行一次写入一行,而不会混淆在一起