运行方法V / S启动方法,混乱

时间:2017-07-01 06:52:54

标签: java multithreading

我在理解Java中的线程时遇到了一些麻烦,所以我在堆栈交换和其他地方搜索了一些答案。几乎每个答案的摘要都是:

The start method makes sure the code runs in a new thread context. 如果你直接调用run,那么它就像一个普通的方法调用,它将在当前线程的上下文中运行而不是新的。 The start method contains the special code to trigger the new thread; run obviously doesn't have that ability because you didn't include it when you wrote the run method.

第二行是什么意思? 当我创建一个扩展线程类的类的对象然后我使用那个对象调用run()方法时,它怎么可能触发之前的线程?

我正在创建一个新对象,当我直接调用run()方法时,它是否应该自动创建一个新线程?

从我对该答案的理解,如果我有两个类A和B都继承了线程类。首先我在类A的对象上使用start方法,然后我直接在类B的对象上调用run方法,它将在当前线程的上下文中运行,即线程A级?

注意: - 这个可能看起来像一个重复的问题,但我可以向你保证,我已经完成了关于这个主题的大量研究,但我还没有得到满意的答案!

1 个答案:

答案 0 :(得分:0)

  

我正在创建一个新对象,当我直接调用run()方法时,是不是应该自动创建一个新线程?

没有。您只是创建一个表示线程的新Thread对象。该线程尚未启动,调用run显然启动它。如果你调用run它将在运行调用代码的任何线程上运行。

  

从我对该答案的理解,如果我有两个类A和B都继承了线程类。首先,我在A类对象上使用start方法

很好,现在我们已经使用aObject.start()启动了一个帖子。但是,调用代码仍在主线程上运行。只有run A方法中的内容正在新线程上运行。

  

然后我直接在类B的对象上调用run方法,它会在当前线程的上下文中运行,也就是A类的线程?

正如我之前所说,当前线程仍然是主线程,而不是A对象所代表的线程。在run的对象上调用B只会在主线程上运行其中的任何内容。