使用线程的三种方式
使用线程的三种方式
- 实现Runnable接口
- 实现Callable接口
- 继承Thread类
实现 Runnable接口和 Callable接口相当于创建了一个可以在线程中运行的任务;创建任务后还需要Thread来驱动。
Runnable
需要实现接口中的 run(), 在方法内编写需要执行的任务
/**
* @Auther: match
* @Date: 2021/2/20 16:25
* @Description: 演示Runnable接口的简单使用
*/
public class RunnableDemo {
private static class Task implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
public static void main(String[] args) {
Thread thread = new Thread(new Task() );
thread.start();
}
}
Callable接口
Callable可以有返回值,返回值通过 FutureTask 进行封装。
/**
* @Auther: match
* @Date: 2021/2/20 16:31
* @Description: 演示Callable接口的简单使用
*/
public class CallableDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//1.创建callable的实现类
CallableTask callableTask = new CallableTask();
//2. 创建一个任务
FutureTask futureTask = new FutureTask<>(callableTask);
// 交友线程执行
Thread thread = new Thread(futureTask);
thread.start();
//通过get方法得到返回值
System.out.println(futureTask.get());
}
static class CallableTask implements Callable{
@Override
public String call() throws Exception {
System.out.println(Thread.currentThread().getName());
return "这是Callable的返回值";
}
}
}
继承Thread
/**
* @Auther: match
* @Date: 2021/2/20 16:37
* @Description: 演示Thread的简单使用
*/
public class ThreadDemo extends Thread {
@Override
public void run(){
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
ThreadDemo threadDemo = new ThreadDemo();
threadDemo.start();
}
}
三种方式的比较
实现接口的方式比较好一些,因为:
- Java不支持多继承体系,但接口可以实现多个,因此继承了Thread类就无法继承其他类。
- 类可以只要求可执行就行,继承整个Thread类开销过大。