Tres formas de usar hilos
Tres formas de usar hilos
- Implementar la interfaz Runnable
- Implementar la interfaz invocable
- Heredar la clase Thread
Implementar la interfaz Runnable y la interfaz Callable es equivalente a crear una tarea que se puede ejecutar en un hilo; después de que se crea la tarea, debe ser impulsada por Thread.
Ejecutable
Necesita implementar run () en la interfaz, escriba las tareas a ejecutar en el método
/**
* @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();
}
}
Interfaz invocable
Invocable puede tener un valor de retorno, y FutureTask encapsula el valor de retorno.
/**
* @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的返回值";
}
}
}
Heredar hilo
/**
* @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();
}
}
Comparación de tres formas
La forma de implementar la interfaz es mejor porque:
- Java no admite múltiples sistemas de herencia, pero se pueden implementar múltiples interfaces, por lo que si hereda la clase Thread, no podrá heredar otras clases.
- La clase solo puede ser ejecutable y es demasiado caro heredar la clase Thread completa.