前言
Java创建线程方式可分为3类,分为为继承Thread类、实现Runnable接口、实现Callable接口。下面介绍这3类的具体使用。
一、继承Thread类
1、类继承Thread类,并重写run()方法,将线程的执行体写在run()方法中,创建该类的对象就相当于创建了一个线程对象,线程对象调用start()方法启动线程。注意:启动线程不能调用run()方法。
public class Method1{
public static void main(String[] args) {
Test1 test1 = new Test1(); // 创建一个线程对象
test1.start(); // 启动线程
}
}
class Test1 extends Thread{
@Override
public void run() {
System.out.println("线程在运行中...");
}
}
2、上述方法需要单独创建一个类,可以使用匿名类的方式减少创建该类。
public class Method1{
public static void main(String[] args) {
Thread thread = new Thread(){
@Override
public void run() {
System.out.println("线程正在运行中...");
}
};
thread.start();
}
}
二、继承Runnable接口
1、类实现Runnable接口,并实现run()方法,将线程的执行体写入run()方法中。创建类的实例,并将其作为Thread的target来创建Thread对象,Thread对象为线程对象,线程对象调用start()方法启动线程。
public class Method1{
public static void main(String[] args) {
Test1 test1 = new Test1(); // 创建一个线程对象
Thread thread = new Thread(test1);
thread.start();
}
}
class Test1 implements Runnable{
@Override
public void run() {
System.out.println("线程在运行中...");
}
}
2、上面的方式需要子类实现Runnable接口,显然不好用,可以通过匿名类实现Runnable接口,就不用再单独写一个类了,创建Runnable实例,并将对象作为Thread的target来创建Thread对象,Thread对象为线程对象,线程对象调用start()方法启动线程。
public class Method1{
public static void main(String[] args) {
// 匿名类实现一个接口 创建任务对象
Runnable runnable = new Runnable(){
@Override
public void run() {
System.out.println("线程运行中...");
}
};
// 创建线程对象
Thread thread = new Thread(runnable);
thread.start();
}
}
3、上一种方法中,创建任务对象,然后再将任务对象传参给线程对象,可以简化为下面这样:
public class Method1{
public static void main(String[] args) {
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
System.out.println("线程运行中...");
}
});
thread.start();
}
}
简化之后可以使用lambda表达式再次简化,简化为:
public class Method1{
public static void main(String[] args) {
Thread thread = new Thread(()->{
System.out.println("线程正在运行中");
});
thread.start();
}
}
三、实现Callable接口
和实现Runnable类似,可以自行尝试