Java 我是否可以重写Thread#start()方法,因为它未声明为Final?

Java 我是否可以重写Thread#start()方法,因为它未声明为Final?,java,multithreading,Java,Multithreading,如果我想重写Thread#start()方法,可以吗? 如果是,它是否会影响线程的任何正常功能?如果您的意思是thread.start(),请确保可以覆盖它。但是,除非您在其中调用super.start(),否则线程不会做任何事情。如果您是指thread.start(),请确保您可以覆盖它。但是,除非您在其中调用super.start(),否则线程不会做任何事情。如果您愿意,可以重写它 根据您想对该方法执行的操作,它可能会影响正常功能;从这个意义上说,你的问题不是很具体。您应该做的是在方法中调用

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

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

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

如果您愿意,可以重写它


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

如果您愿意,可以覆盖它


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

您可以覆盖
线程.start()
,但如果不调用
super.start()
,它将不会在新堆栈中创建新的踏板


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

您可以覆盖
线程.start()
但是如果您不调用
super.start()
它将不会在新堆栈中创建新的踏板


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

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

一般来说,看一看是个好主意。除了了解重写方法必须做什么(最简单的方法是调用super),您还可以了解很多关于平台设计理念和优秀Java编程的知识


也许这就是您首先重写
start
的原因,但我偶尔发现,重写那些根本不需要重写的方法非常有用,这样我就可以记录消息,并了解它们被调用的时间、调用的内容和原因。

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

一般来说,看一看是个好主意。除了了解重写方法必须做什么(最简单的方法是调用super),您还可以了解很多关于平台设计理念和优秀Java编程的知识


也许这就是您首先重写
start
的原因,但是我偶尔发现重写那些实际上不需要重写的方法很有用,这样我就可以把消息记录在日志中,了解调用它们的时间、调用对象和原因。

请提供更多信息。你是说Thread.start()吗?你有什么特殊的原因需要你这么做吗?@elliot:是的,我说的是Thread.start()。我只是想做个实验,我正在学习Java Basics。请提供更多信息。你是说Thread.start()吗?你有什么特殊的原因要求你这么做吗?@elliot:是的,我说的是Thread.start()。我只是想做个实验,我正在学习Java Basic为什么需要super.start(),通常我们称它为Thread\u object.start()。好吧,如果你重写
start()
,那么重写的
start()就可以了除非调用已覆盖的
super.start()
,否则不会调用
。如果没有,线程将无法启动。为什么通常不会像我们通常调用的重写方法那样调用它。您对重写的概念似乎不正确。重写意味着调用重写方法而不是重写方法。在Java中,只能使用
super.xxx()
语法从重写方法中调用重写方法。如果不使用它,则根本不会调用重写的方法。这是重写的方法中的代码。虽然没有那么壮观,但它确实包含了重要的线程内容,如果没有这段代码,线程将不会像预期的那样运行。为什么super.start()是必需的,因为我们通常将其称为thread\u object.start()。好吧,如果覆盖
start()
,那么覆盖的
start()
将不会被调用,除非调用
super.start()
您已经覆盖了它。如果没有,线程将无法启动。为什么通常不会像我们通常调用的重写方法那样调用它。您对重写的概念似乎不正确。重写意味着调用重写方法而不是重写方法。在Java中,只能使用
super.xxx()
语法从重写方法中调用重写方法。如果不使用它,则根本不会调用重写的方法。这是重写的方法中的代码。虽然没有那么壮观,但它确实包含了重要的线程内容,如果没有这段代码,线程的行为将不会像预期的那样,为什么它会生成新线程,因为函数名仍然相同,它应该仍然调用相同的运行方法..?为什么它会生成新线程,因为函数名仍然相同,它应该仍然调用相同的run方法。。?