——————————————————————————————————————————————————————————————————————
主要介绍Java中创建线程的几种方法
方法 | 说明 |
---|---|
Thread() | 创建线程对象 |
Thread(Runnable target) | 使用Runnable对象创建线程 |
1.继承Thread类
Thread类是一个抽象类,可以通过继承Thread类重写其中的run方法,run方法中包括线程要执行的代码
🌰:定义Demo1类继承父类Thread,重写父类中的run方法,对Demo1类进行实例化创建线程对象thread,通过调用strat来启动线程
public class Demo1 extends Thread{
@Override
public void run() {
System.out.println("继承Thread类,创建线程");
}
public static void main(String[] args) {
//创建demo1类的实例
demo1 thread = new demo1();
//调用start方法启动线程,启动后有JVM执行run方法
thread.start();
}
}
重写Thread类中的run方法,是因为JVM虚拟机执行时需要调用run方法,而原本run方法中并没有实际内容因此要重写。
2.实现Runnable接口
Runnable接口接口中只定义了抽象方法run方法,重写其中的run方法,将实现接口的类的实例传入Thread构造方法中
🌰:定义Demo2类实现Runnable接口,重写run方法,对Demo2类创建实例化对象demo2,创建Thread类实例将Runnable对象作为参数传递。
public class Demo2 implements Runnable{
@Override
public void run() {
System.out.println("实现Runnable接口,创建线程。");
}
public static void main(String[] args) {
//创建实现Runnable接口的实例化对象
Demo2 demo2 = new Demo2();
//将实例化对象传入Thread类使用Runnable对象的构造方法中
Thread thread = new Thread(demo2);
//上述两行代码可简化为:Thread thread = new Thread(new Demo2());
//调用start由JVM执行run方法
thread.start();
}
}
重写Runnable接口中的run方法,是因为Runnable接口中只有一个run方法,类实现Runnable接口必须重写run方法
3.通过匿名内部类创建Thread、Runnable子类对象
匿名内部类可以避免定义一个继承或者实现接口类的创建,内部类没有名称只能使用一次,创建临时对象
public class Demo3 {
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
System.out.println("匿名内部类创建Thread子类对象");
}
};
}
}
public class Demo4 {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类实现Runnable接口");
}
});
}
}
4.Lambda表达式(常用的方法)
Lambda表达式是用更简洁的方法替换实现只包含一个抽象方法的接口,将传递构造方法中实现Runnable接口的实例对象用Lambda表达式替代,在表达式外调用start方法由JVM执行表达式中的代码
public class Demo5 {
public static void main(String[] args) {
Thread thread = new Thread(() -> {
System.out.println("Lambda表达式");
});
thread.start();
}
}
Lambda表达式:() -> {代码逻辑}