gpt4 book ai didi

Java线程调用父函数

转载 作者:行者123 更新时间:2023-12-04 15:25:44 24 4
gpt4 key购买 nike

我正在制作一些用 java 编写的软件,它涉及一个“父”类,该类调用数十个在自己的线程中运行的类(节点)(扩展线程)。

类将父类存储为变量。如果节点类调用父类的方法,每个节点是否存储父对象的副本,还是所有节点都作用于同一个对象?如果所有节点都作用于同一个对象,那么被调用函数中的语句是在节点的线程中运行还是在父类的线程中运行?

EX 代码:

    class parent
{
ArrayList<node> nodes = new ArrayList<node>();
void createStartNodes()
{
for(int i =0; i < 36;++i)
{
nodes.put(i,new node(this));
nodes.get(i).start();
}
}
void callSomeFunc()
{
/* things */
}
}
class node extends Thread
{
parent par;
public node(parent p)
{
par=p;
}
@Override
public void run()
{
par.callSomeFunc();
}
}

最佳答案

我认为你把事情搞糊涂了。在回答您的问题之前,我只想澄清这些:

  • 一个类不会“在线程中运行”,因为它不会“运行”。您可以运行方法,而不是类。 一个类的方法可以在不同的线程中执行,具体取决于您调用它的位置。

  • 当延长 Thread类(注意大写 T),您应该覆盖 run()方法,而不是 start()方法,否则多线程的东西不会发生。但是,您确实必须调用 start() ,在 Thread 类中定义,它会调用你的 run()如您所料,创建线程中的方法。[编辑:这一点显然在 OP 的编辑中得到了解决]

话虽如此,回到你的实际问题:

does each node store a copy of the parent object or do all the nodes act upon the same object?

每个 java 对象(读取非原始类型)只是一个引用,您不传递对象值。因此,您的所有节点都存储对同一对象的引用,因为您在调用它们的构造函数时为它们提供了对同一对象的引用 (this)。

do statements in the called function run in the thread of the node or in the thread of the parent class?

在您的代码的当前状态下,您没有覆盖 run()但是 start() ,所以无论如何你都没有多个线程。 (由 OP 解决)

run() 中执行的代码方法将在节点的线程中执行,即使从 run() 调用其他方法

旁注:这是因为您调用了 node.start()适本地。如果您直接调用node.run() ,它将在您调用 run() 的线程中执行.

关于Java线程调用父函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29870941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com