1、 对比
-
继承Thread
- 优点:可以直接使用Thread类中的方法,代码简单
- 缺点:因为Java是单继承,所以继承Thread之后就不能继承其他的类
-
实现Runnable接口
- 优点:即自定义类已经有了父类也不会受到影响,因为可以实现多个接口
- 缺点:在run方法内部需要获取到当前线程的Thread对象后才能使用Thread中的方法
-
实现Callable接口
- 优点:可以获取返回值,可以抛出异常
- 缺点:代码编写较为复杂
2、创建线程的两种编码方式
使用匿名内部类创建线程
/*
* 使用匿名内部类创建线程
*/
new Thread(new Runnable() { // 1.将Runnable的子类对象传递给Thread的构造方法
public void run() { // 2.重写run方法
for (int i = 0; i < 1000; i++) { // 3.将要执行的代码写在run方法中
System.out.println("Runnable");
}
}
}).start(); // 4.开启线程
使用lambda表达式创建线程
//lambda写法
//因为Thread类中接收Runnable类型的对象,所以编译器会识别出lambda表达式是Runnable对象
new Thread(() -> {
for (int i = 0; i < 1000; i++) { // 3.将要执行的代码写在run方法中
System.out.println("lambda");
}
}).start();