如果我想覆盖该Thread#start()
方法可以吗?如果是,它会影响线程的任何正常功能吗?
问问题
2375 次
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 回答