5、JUC--实现 Callable 接口
Callable接口
Java 5.0 在 java.util.concurrent 提供了一个新的创建执行
线程的方式:Callable 接口
Callable 接口类似于 Runnable,两者都是为那些其实例可
能被另一个线程执行的类设计的。但是 Runnable 不会返
回结果,并且无法抛出经过检查的异常。
Callable 需要依赖FutureTask ,FutureTask 也可以用作闭锁
创建执行线程的方法有四种:
1、继承Thread类或者创建线程类
2、通过实现Runable接口创建线程类
3、通过Callable接口
4、通过线程池创建线程
相对于Runable接口的不同:
可以使用泛型,方法可以有返回值没并且可以抛出异常
实例:
public class TestCallabel { public static void main(String[] args) { ThreadDemoCallable tc = new ThreadDemoCallable(); //此时的使用方式有些不同 //1、需要FutureTask实现类的支持,用于接收运算结果 FutureTask<Integer> result = new FutureTask<>(tc); new Thread(result).start(); //2、接收运算的结果 //注意:只有上述的线程之后下方的代码才会执行----闭锁 try { Integer sum = result.get(); System.out.println(sum); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } //可以使用泛型 class ThreadDemoCallable implements Callable<Integer>{ @Override public Integer call() throws Exception { //计算整合 int sum = 0; for(int i = 0;i <10;i++){ sum +=i; } return sum; } }
效率高
可以实现和闭锁一样的实现功能