1、Callable与Runnable的区别
-是否有返回值
-是否抛出异常
-实现方法名称不同,一个是run方法,一个是call方法
2、Callable接口创建线程-FutureTask
错误的方式:
new Thread(new MyRunnable(),"Runnable接口");//会报错//new Thread(new MyCallable(),"Callable接口");
FutureTask<Integer> futureTask=new FutureTask<>(new MyCallable());//使用Lam表达式改进FutureTask<Integer> futureTask1=new FutureTask<>(()->{return 1024;});//创建并启动线程new Thread(futureTask1,"Callable线程1").start;new Thread(futureTask1,"Callable线程2").start;//判断线程是否已经结束while(!futureTask1.isDone()){System.out.println("wait.....");}System.out.println(futureTask1.get());//获取线程的返回值
