代码:
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
*/
答案 0 :(得分:0)
这里发生的是主线程启动两个线程并退出。每个新线程都将消息写入stdout,然后结束。此时,因为所有非守护程序线程都已完成JVM退出。
由于发布的代码定义了一个Runnable,但它的名称以Thread结尾,因此发布的代码令人困惑。
一个Thread对象与一个os级线程有关,在一个Thread上调用start会使传入的Runnable执行的run方法中的代码在一个与调用start的线程不同的线程上运行。
Runnable定义了一个任务,但没有指定它的运行方式。它可以传递给特定的Thread的构造函数或提交给Executor或由当前线程运行。
在这种情况下,声明的Runnable没有状态,没有声明实例变量。这里有两个线程可以执行相同的Runnable而不会发生冲突,因为没有共享状态。写入控制台的打印流是同步的,因此线程写入的行每次都会写入一行并且不会混淆在一起。