Java创建线程的三种形式的区别以及优缺点
1.实现Runnable,Callable
Callable接口里定义的方法有返回值,可以声明抛出异常。
继承Callable接口实现线程
class ThreadCall implements Callable<Integer>{
@Override
public Integer call() throws Exception {
return 100;//更具需要设置返回值
}
}
//调用方法案例
FutureTask<Integer> futureTask = new FutureTask<Integer> (new ThreadCall());
new Thread (futureTask).start ();
try {
Integer integer = futureTask.get ();
System.out.println (integer);
} catch (InterruptedException e) {
e.printStackTrace ();
} catch (ExecutionException e) {
e.printStackTrace ();
}
因此可以将实现Runnable接口和实现Callable接口归为一种方式。这种方式与继承Thread方式之间的主要差别如下。
1.采用实现Runnable、Callable接口的方式创建多线程的优缺点:
优点:
线程类只是实现了Runnable接口与Callable接口,还可以继承其他类。
在这种方式下,多个线程可以共享一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
缺点
编程稍稍复杂,如果需要访问当前线程,则必须使用Thread.currentThread()方法。
2.继承Thread
劣势:因为线程类已经继承了Thread类,所以不能再继承其他父类。
优势:编写简单,如果需要访问当前线程,则无须使用Thread.currentThread()方法,直接使用this即可获得当前线程。
总结:
鉴于上面分析,因此一般推荐采用实现Runnable接口、Callable接口的方式来创建多线程。