创建和使用线程,就是要让这个线程完成一些特定的功能。 Java 提供了 java.lang.Thread
类来完成多线程的编程,这个类也提供了大量的方法方便操作线程。在编写一个线程类时,可以继承自这个 Thread
类,完成线程的相关工作。
有时编写的线程类除了继承 Thread
以外还要继承其他类,但 Java 又不支持多继承,所以 Java 还提供了另外一种创建线程的方式,即实现 Runnable
接口。
因此,有两种定义线程类的方式——继承 Thread
类和实现 Runnable
接口。
如果线程类直接继承 Thread
类,其代码结构大致如下:
class 类名 extends Thread{
//属性
//其他方法
public void run() { // 重写 `Thread` 类中的 run() 方法
//线程需要执行的核心代码
}
}
从线程类的代码结构可以看出,一个线程的核心代码需要写在 run()
方法里。也就是说,当线程从就绪状态,通过调度程序分配 CPU 资源,进入运行状态后,执行的代码即 run()
方法里面的代码。
如果线程类是实现 Runnable
接口的,其代码结构大致如下:
class 类名 implements Runnable{
//属性
//其他方法
public void run() { // 实现Runnable接口中的 run() 方法
//线程需要执行的核心代码
}
}
和继承 Thread
类非常类似,实现 Runnable
接口的线程类也需要编写 run()
方法,将线程的核心代码置于该方法中。但是 Runnable
接口中仅仅定义了 run()
这么一个方法(Thread类中可以接收Runnable对象)因此还必须将 Runnable
对象转换为 Thread
对象,从而使用 Thread
类中的线程 API ,转换的方法如下所示。
Runnable 实现类名 对象名 = new Runnable实现类名();
Thread 线程对象名 = new Thread(对象名);