启动一个线程是用 run(还是 start()方法?
时间: 2024-02-20 11:56:49 浏览: 29
启动一个线程应该使用 start() 方法,而不是 run() 方法。当你调用 start() 方法时,它会在一个新的线程中执行 run() 方法。如果你直接调用 run() 方法,它将在当前线程中执行,而不会创建新的线程。
例如,假设你有一个类实现了 Runnable 接口,它的 run() 方法包含一些需要在新线程中执行的代码。你可以使用以下代码启动新线程:
```java
Runnable myRunnable = new MyRunnable(); // MyRunnable 实现了 Runnable 接口
Thread myThread = new Thread(myRunnable);
myThread.start(); // 启动新线程
```
在上面的代码中,我们首先创建了一个 Runnable 对象(MyRunnable),然后将其传递给 Thread 构造函数。最后,我们调用 start() 方法启动新线程。
请注意,如果你直接调用 run() 方法,它将在当前线程中执行,而不会创建新的线程。因此,如果你想在新线程中执行代码,你必须使用 start() 方法来启动新线程。
相关问题
启动线程用run还是start
启动线程应该使用 `start` 方法而不是 `run` 方法。`start` 方法会在新线程中执行 `run` 方法,而 `run` 方法只会在当前线程中执行,这样会阻塞当前线程,无法实现多线程的并发执行。因此,正确的做法是在需要启动新线程的地方调用 `start` 方法,这样会在新线程中执行对应的代码。
为什么启动一个线程不用run()方法,而是用start()方法
在Java中,启动一个线程使用的是`start()`方法,而不是直接调用`run()`方法。这是因为`start()`方法会创建一个新的线程,并使其执行该线程对象的`run()`方法。
当直接调用`run()`方法时,相当于在当前线程的上下文中执行了`run()`方法的代码,而不会创建新的线程。这样做会导致代码在当前线程中同步执行,而不会并发执行。如果我们希望多个线程并发执行,就需要使用`start()`方法来创建新的线程。
当调用`start()`方法时,系统会为新的线程分配资源,并在新的线程上下文中执行`run()`方法的代码。这样可以实现多个线程同时执行,提高了程序的并发性能。
需要注意的是,Java中一个线程对象的`start()`方法只能被调用一次。如果尝试多次调用`start()`方法,会抛出`IllegalThreadStateException`异常。这是因为一个线程对象只能启动一次,多次启动会导致不可预测的行为。
总结来说,使用`start()`方法启动一个线程可以创建新的线程并实现并发执行,而直接调用`run()`方法只会在当前线程中同步执行。