gpt4 book ai didi

java - 如果一个方法属于另一个扩展Thread的类,但从主线程调用,那么它会由主线程还是子线程执行? ( java )

转载 作者:行者123 更新时间:2023-12-01 12:48:35 25 4
gpt4 key购买 nike

我知道那里有一些类似的问题,但我找不到专门回答这个问题的人 - 如果我错了,我很抱歉,确实有。 test.toString() 方法将由主线程执行,还是由我在调用它之前启动的测试线程执行?我们一群人正在争论这个问题以进行测试修改,我很好奇答案是什么。

public class Main {
public static void main(String[] args) {
test = new ThreadTest("Test", 3);
test.start();
System.out.println(test.toString());
}
}
public class ThreadTest extends Thread {
public ThreadTest(String n, int x) {
setName(n);
}
@Override
public String toString() {
return(getName() + ": x = " + x);
}
public void run() {
//Nothing of any relevance to the problem occurs here
}
}

最佳答案

toString() 调用在主线程上执行。主线程正在调用Main.main()main() 直接调用 test.toString()

仅仅因为您的输出打印字符串“Test”并不意味着该线程正在执行它。 线程有状态; setName(...) 设置该状态(并且您的类 TestThreadTest 的子类,因此它也继承了该状态)。在您的 toString() 实现中,您只是打印该状态...而不是执行线程的实际名称。

为了证明这一点,请更改您的 TestThread.toString() 方法,以打印当前正在执行的线程的名称并重新运行:

   @Override
public String toString() {
return(getName() + ": x = " + x + " executed on thread " + Thread.currentThread().getName());
}

您将看到以下打印到标准输出:

测试:x = 3 在主线程上执行

完整代码:

public class Main {
public static void main(String[] args) {
ThreadTest test = new ThreadTest("Test", 3);
test.start();
System.out.println(test.toString());
}


}

public class ThreadTest extends Thread {
private int x;
public ThreadTest(String n, int x) {
setName(n);
this.x = x;

}
@Override
public String toString() {
return(getName() + ": x = " + x + " executed on thread " + Thread.currentThread().getName());
}
public void run() {
//Nothing of any relevance to the problem occurs here
}
}

关于java - 如果一个方法属于另一个扩展Thread的类,但从主线程调用,那么它会由主线程还是子线程执行? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441751/

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