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提供了源代码,因此您可以确切地了解origianlstart
方法的功能
一般来说,看一看是个好主意。除了了解重写方法必须做什么(最简单的方法是调用super),您还可以了解很多关于平台设计理念和优秀Java编程的知识
也许这就是您首先重写
start
的原因,但我偶尔发现,重写那些根本不需要重写的方法非常有用,这样我就可以记录消息,并了解它们被调用的时间、调用的内容和原因。与某些语言不同,Java允许您覆盖任何内容,包括Thread.start。这样做肯定会影响start
方法的正常功能。与某些语言不同,Java提供了源代码,因此您可以确切地了解origianlstart
方法的功能
一般来说,看一看是个好主意。除了了解重写方法必须做什么(最简单的方法是调用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方法。。?