如果我想覆盖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()
它基本上在自己的堆栈中启动新线程。