小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
-
使用继承Thread类的方式创建多线程
优势:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this即可获得当前线程
劣势:线程类已经继承了Thread类,不能再继承其他父类
-
采用实现Runnable、Callable接口的方式创建多线程
优势:线程只是实现了Runnable接口或Callable接口,还可以继承其他类。在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好的体现了面向对象的思想。
劣势:编程稍微复杂,如果要访问当前线程,必须使用Thread.curentThread()方法
-
Runnable和Callable的区别
- Callable重写的方法是call(),Runnable重写的方法是run()
- Callable的任务执行后可返回值 ,而Runnable的任务是不能返回值的
- call方法可以抛出异常,run方法不可以
- 运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索 计算的结果。通过Future对象可以了解任务执行情况,可以取消任务的执行,还可获取执行结果