一、如何创建一个线程? 1、继承Thread类 2、实现Runnable接口 可是问题来了,Thread有传Runnable接口的,却没有传Callable接口的: 那我怎么才能使用Callable创建线程呢? 二、接口实现的思想
一、如何创建一个线程?
1、继承Thread类
2、实现Runnable接口
可是问题来了,Thread有传Runnable接口的,却没有传Callable接口的:
那我怎么才能使用Callable创建线程呢?
二、接口实现的思想
我们知道,一个类可以实现多个接口,在给方法传参的时候,可以传入参数类型的子类,例如:
interface Animal
interface Pet
class Cat implement Animal , Pet
那么就可以使用public void A(Cat cat){} 代替public void B(Animal animal){} 和public void C( Pet pet ){}。
回到刚才的问题,如何传入一个Callable类型的接口创建线程呢?你可能在想,既然他只有接收Runnable接口的构造器,那么能不能设计一个类既实现Runnable又实现Callable接口呢?那我往构造器里传就不能说我语法错误了呀。
就是这么干的!当你打开JDK,查看Runnable接口时,会发现Runnable有子接口RunnableFuture:
而子接口有实现类FutureTask:
而此类拥有构造器:
三、案例实施
public class CallableTest { public static void main(String[] args) { FutureTask futureTask = new FutureTask(new MyThread()); new Thread(futureTask,"A").start(); } } class MyThread implements Callable { @Override public Integer call() throws Exception { System.out.println("come in "); return 12345; } }