gpt4 book ai didi

java - 如果我们在 start 方法而不是 run 方法中执行整个 Thread 功能,会发生什么?

转载 作者:行者123 更新时间:2023-11-30 06:09:46 25 4
gpt4 key购买 nike

如果我们在 start 方法而不是 run 方法中执行整个 Thread 功能,会发生什么?下面的代码运行方式与我在 run 方法中添加代码时的运行方式相同。

   public class RunMethodTest extends AppCompatActivity {


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Abc abc=new Abc();
abc.start();
}
}

class Abc extends Thread
{
@Override
public synchronized void start() {
super.start();
for(int i=0;i<10;i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread" + " " + i);
}
}
}

最佳答案

测试它:让您的代码告诉您它正在被哪个线程调用

  1. 通过Thread.currentThread()获取当前线程
  2. 然后通过getId()getName()获取当前线程的id和name

public class ThreadTest {
public static void main(String[] args) {
Thread currentThread = Thread.currentThread();
System.out.printf("Main, Which Thread: %s, %d%n",
currentThread.getName(),
currentThread.getId());

Abc abc = new Abc();
abc.start();
}
}

class Abc extends Thread {
@Override
public synchronized void start() {
super.start();

Thread currentThread = Thread.currentThread();
System.out.printf("Start, Which Thread: %s, %d%n",
currentThread.getName(),
currentThread.getId());

for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread" + " " + i);
}
}

@Override
public void run() {
super.run();

Thread currentThread = Thread.currentThread();
System.out.printf("Run, Which Thread: %s, %d%n",
currentThread.getName(),
currentThread.getId());
}
}

对我来说,这返回:

Main, Which Thread: main, 1
Start, Which Thread: main, 1
Run, Which Thread: Thread-0, 9
Thread 0
Thread 1
Thread 2
Thread 3
....

这证明您的 Abc 的 start 方法(如预期)在与调用代码相同的线程中调用,而不是在新线程中调用,并且只有 run() 方法中的代码是在新线程中被调用。正如上面所指出的,您几乎不需要或想要扩展 Thread,而是实现 Runnable 或 Callable。

关于java - 如果我们在 start 方法而不是 run 方法中执行整个 Thread 功能,会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50527682/

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