【问题标题】:What is happening in below code of threading?下面的线程代码发生了什么?
【发布时间】:2016-08-27 13:05:14
【问题描述】:

代码:

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
*/

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    这里发生的是主线程启动两个线程并退出。每个新线程都会向标准输出写入一条消息,然后结束。此时,由于所有非守护线程都已完成 JVM 退出。

    发布的代码令人困惑,因为它定义了一个 Runnable 但给它一个以 Thread 结尾的名称。

    Thread 对象与操作系统级别的线程相关,在 Thread 上调用 start 会使传入的 Runnable execute 的 run 方法中的代码在与调用 start 的线程不同的线程上运行。

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-13
      • 2017-12-27
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2016-02-14
      相关资源
      最近更新 更多