runnable 与thread的区别
时间: 2023-06-09 22:02:14 浏览: 98
Runnable 和 Thread 都与多线程编程相关。
Runnable 是一个接口,定义了一个单一的方法 run()。我们可以创建一个被 Runnable 实现的类的对象,然后将其传递给 Thread 的构造函数中。这个线程实例化后,通过启动它来执行该线程的 run() 方法。实际上,线程执行的步骤分为两个部分:第一个部分是分配新的线程资源,第二个部分是调用线程的 run() 方法。通过将可运行对象传递给线程,可以分离线程的创建和运行。
Thread 类继承 Runnable 接口,因此 Thread 也实现了 run() 方法。除此之外,Thread 能够在启动线程时更加灵活,还提供了其他有用的方法,比如 stop(), suspend() 和 resume() 等。但是,在 Java 5 之后,这些方法被废弃,建议使用更加安全可靠的线程操作方法。
相关问题
runnable UI Thread
在Android开发中,可以使用Runnable接口来创建一个可以在UI线程上运行的任务。UI线程是用于更新用户界面的主线程。
要在UI线程上运行一个Runnable任务,可以使用Handler类的post方法,如下所示:
```java
// 创建一个Runnable任务
Runnable runnable = new Runnable() {
@Override
public void run() {
// 在这里执行需要在UI线程上运行的代码
// 例如更新UI元素或执行耗时操作
}
};
// 在UI线程上运行该任务
Handler handler = new Handler(Looper.getMainLooper());
handler.post(runnable);
```
在上述代码中,首先创建一个Runnable对象,然后使用Handler的post方法将该任务投递到UI线程上运行。这样可以确保任务在UI线程上执行,避免在非UI线程上更新UI元素导致的异常。
请注意,上述代码中的`Looper.getMainLooper()`返回的是UI线程的Looper对象。因此,需要在UI线程上调用该代码段,否则会出现异常。
runnable和thread
在Java中,线程可以通过继承Thread类或实现Runnable接口来创建。Runnable接口为关联Thread对象的线程提供执行的代码。这些代码放在Runnable的void run()方法中,这个方法虽然不接受任何参数且没有返回值,但是有可能抛出异常。具体来说,Thread类就是实现了Runnable接口,Thread类中的run()方法也是对Runnable接口中的run()方法的实现。我们可以通过以下两种方式来创建Thread和Runnable对象:
1.继承Thread类。我们需要重写Thread类的run()方法,然后在该方法中编写线程的业务逻辑。最后我们可以实例化Thread类对象,并调用其start()方法来启动线程。例如:
```java
class MyThread extends Thread {
public void run() {
System.out.println("MyThread is running!");
}
}
```
2.实现Runnable接口。我们需要重写接口的run()方法,然后在该方法中编写线程的业务逻辑。最后,我们可以将Runnable实例传递给Thread类的构造函数来实例化Thread对象。例如:
```java
class MyRunnable implements Runnable {
public void run() {
System.out.println("MyRunnable is running!");
}
}
```
然后我们可以这样来启动一个线程:
```java
MyThread mt = new MyThread();
mt.start();
MyRunnable mr = new MyRunnable();
Thread t = new Thread(mr);
t.start();
```
阅读全文