我可以覆盖 Thread#start() 方法吗,因为它没有声明为 Final



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

如果你的意思是Thread.start(),当然你可以覆盖它。但是,除非您在其中调用super.start(),否则线程不会执行太多操作。

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

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

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

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

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

您可以

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

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

最新更新