新建线程有3个方法。
1.new Thread。也就是直接新建一个线程。
2.实现Runnable接口。
3.实现Callable接口。
4.应用程序可以使用Executor框架来创建线程池
这个时候会很好奇,
这三种方法有什么区别呢?
thread和runnable本质上没有区别。
只不过一个是直接继承的类,一个是实现的接口。
而其实Thread里面也是实现了Runnable接口。
所以,无论是用Thread,还是用Runnable或者Callable都有一个new Thread的过程。
他们都是通过thread.start()来启动的。
对于一个thread,那么直接xxx.start()即可。
对于一个Runnable,那么需要转为一个thread,比如 new Thread(Runnable对象).start()
同理,Callable也是如同Runnable。
不过Callable的区别在于:
实现Callable接口的任务线程能返回执行结果;而实现Runnable接口的任务线程不能返回结果;
Callable接口的call()方法允许抛出异常;而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛;
最后总结一下呢:
实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。
后续会有更深层次了解以及分析。一个关于线程初步的浅谈已经完成。