1.
Runnable和Callable之间的区别
Runnable和Callable之间的区别
1、Runnable任务执行后没有返回值;Callable任务执行后可以获得返回值
2、Runnable的方法是run(),没有返回值;Callable的方法是call(),有返回值
3、Runnable的run()方法不能抛异常,有异常的话只能在run方法里面解决;Callable的call()方法可以抛异常
4、Runnable可以直接传递给Thread对象执行;Callable不可以,Callable执行可以放在FutureTask中,然后把futureTask传递给Thread执行
Runnable和Callable之间的区别 - 劈天造陆 - 博客园
2.4中创建线程方式的区别
1、继承Thread类
2、实现Runnable接口
3、实现Callable接口
4、创建线程池
实现Runnable和实现Callable接口的方式基本相同,不过前者线程执行体run()方法无返回值,而后者执行call()方法有返回值,因此可以把这两种方式归为一种这种方式与继承Thread类的方法之间的差别如下:
1、线程只是实现Runnable或实现Callable接口,还可以继承其他类。
2、这种方式下,多个线程可以共享一个target对象,非常适合多线程处理同一份资源的情形。
3、但是编程稍微复杂,如果需要访问当前线程,必须调用Thread.currentThread()方法。
4、继承Thread类的线程类不能再继承其他父类(Java单继承决定)。
5、前三种的线程如果创建关闭频繁会消耗系统资源影响性能,而使用线程池可以不用线程的时候放回线程池,用的时候再从线程池取,项目开发中主要使用线程池