如果我想覆盖Thread#start()
方法,我可以吗?
如果是,它会影响线程的任何正常功能吗?
答案 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()
,它基本上在自己的堆栈中启动新线程。