创建方式
线程创建的方式有人认为有三种,有人认为两种。
若是认为有三种,则分别是:
- Thread扩展类
- Runnable接口实现类
- 通过Callable和Future创建
若是认为有三种,则分别是:
- Thread扩展类
- Runnable接口实现类
在JDK中Thread.java中有明确指出,以JDK16为例。
文档中指出,有两种创建线程的方式,一种是创建Thread扩展类,一种是Runnable实现类。这两种方式是官方说明。
使用
Thread
创建Thread扩展类,并重写run() 。
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
// Thread扩展类
ThreadPattern threadPattern = new ThreadPattern();
threadPattern.start();
}
/**
* Thread扩展类
*/
private static class ThreadPattern extends Thread{
@Override
public void run() {
super.run();
System.out.println(Thread.currentThread().getName());
System.out.println("Thread扩展类");
}
}
结果:
main
Thread-0
Thread扩展类
main方法运行在main线程中,而新创建的线程是Thread-0,说明确实创建新线程。run方法中则是具体的业务实现。
Runnable
创建Runnable接口实现类,并重写run方法。
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
// Runnable实现
RunnablePattern runnablePattern = new RunnablePattern();
Thread thread = new Thread(runnablePattern);
thread.start();
}
/**
* Runnable实现
*/
private static class RunnablePattern implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
System.out.println("Runnable实现");
}
}
或
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
// 匿名
new Thread(() -> {
System.out.println(Thread.currentThread().getName());
System.out.println("Runnable实现");
});
}
结果:
main
Thread-1
Runnable实现
说明Runnable接口类确实创建了新线程Thread-1。
总结
- Thread是线程的抽象
- Runnable则是业务的抽象
- 若是有人说两种不对,可以引用官方说明。