创建线程的几种方式
1.extends Thread
2.implements Runable
3.implements Callable和Future
4.匿名内部类
Runnable和Callable的区别
- Runnable执行方法是run(),Callable是call()
- 实现Runnable接口的任务线程无返回值;实现Callable接口的任务线程能返回执行结果
- call方法可以抛出异常,run方法若有异常只能在内部消化
join()方法,会插入主线程,执行完这个线程之后才会继续执行主线程