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());//获取线程的返回值