1

如果我想覆盖该Thread#start()方法可以吗?如果是,它会影响线程的任何正常功能吗?

4

4 回答 4

2

如果您的意思是Thread.start(),请确保您可以覆盖它。但除非你super.start()在其中调用,否则线程不会做任何事情。

于 2012-06-22T07:32:27.420 回答
1

如果你愿意,你可以覆盖它。

根据您要对该方法执行的操作,它可能会影响正常功能;从这个意义上说,您的问题不是很具体。您应该做的是调用super.start()您的方法以确保仍然进行任何初始化。

于 2012-06-22T07:33:01.537 回答
1

与某些语言不同,Java 允许您覆盖几乎所有内容,包括 Thread.start。这样做肯定会影响start方法的正常功能。与某些语言不同,Java 提供了源代码,因此您可以确切了解 origianlstart方法的作用。

看看通常是个好主意。除了了解您的覆盖方法必须做什么(最简单的方法是调用 super)之外,您还可以了解很多关于平台的设计理念和关于良好 Java 编程的知识。

也许这就是您首先要覆盖start的原因,但我偶尔发现覆盖实际上不需要覆盖的方法很有用,这样我就可以放入日志消息并了解它们何时被调用,通过什么,为什么。

于 2012-06-22T15:14:06.940 回答
0

您可以覆盖,Thread.start()但如果您不调用super.start()它,它将不会在新堆栈中创建新胎面。

super.start()调用一个本机方法native void start0(),该方法基本上在自己的堆栈中启动新线程。

于 2012-06-22T07:42:24.107 回答