1、继承Thread类
public class ThreadA extends Thread {
// 直接继承Thread,并覆盖其run()方法
@Override
public void run() {
System.out.println("ThreadA");
}
}
2、实现Runnable接口
Java为单亲继承,一个类只能唯一继承另一个类。如果直接继承Thread类来定义线程,则在开发中有许多限制。
public class hreadB implements Runnable {
public void run() {
System.out.println("ThreadB");
}
}
3、实现Callable接口
public class ThreadC implements Callable <String> {
public String call() {
return "ThreadC";
}
}
public static void main(String[] args) {
ThreadC threadc = new ThreadC();
FutureTask<String> feature = new FutureTask<String>(threadc);
new Thead(feature).start(); // 启动
// 获取线程返回结果
System.out.println(feature.get();
}
比较:
1、继承Thread类的方式虽然简单,但是不能继承其他类。很多情况下,开发者只是需要自己的类具有线程的能力,扮演线程的角色,而自己的类需要继承其他类。
2 、实现Runnable接口,不影响继承其他类,也不影响实现其他接口。只是实现Runable接口的类多了一种扮演角色,多了一种能力,更加灵活。