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

时间:2012-06-22 07:29:03

标签: java multithreading

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

也许这就是为什么你首先要覆盖start,但我偶尔发现覆盖那些根本不需要覆盖的方法很有用,这样我就可以记录消息并获得意义当他们被召唤时,由什么以及为什么被召唤。

答案 3 :(得分:0)

您可以覆盖Thread.start(),但如果您不拨打super.start(),则不会在新筹码中创建新的广告。

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