真是人品好,写了文档都赶上11:02这种时间点,一种注孤生的感觉,幸亏我已经有老婆了哈哈。
这篇文章介绍一下Java中Thread和Executor的区别。
主要是翻译的这篇文章。
前言
Thread和Executor都是Java里用来并发执行一些code的,他们之间最主要的区别是在于Executor能提供一个线程池的实现,当然还包括一些同步的实现包括 CountDownLatch, CyclicBarrier, Semaphore, FutureTask, Callable interface, Conditions等。Java中也提供了一个内置的线程池,以一个线程的集合并发的执行code,考虑到创建和运行一个线程是非常昂贵的操作,在之前很多Java应用都在启动的时候创建一个线程池出来,直到Java有了内置线程池,这个线程池的实现就是大名鼎鼎的Executor framework,Executor的出现减轻了很多Java开发者自己创建和管理线程的负担。
Thread和Executor的区别
前言中我们说过,Thread和Executor都是Java里用来并发执行一些code的,你可以通过继承java.lang.Thread
类或者是实现java.lang.Runnable
接口来实现,而Executor是一个接口,也提供了并发执行的能力,但是是通过线程池的形式,这对于大型Java应用来说更加适用,下面我们聊一下他们之间的区别:
- Thread是一个类,Executor是一个接口;
- Executor是并发计算的一个抽象,它允许代码以托管的方式运行,而Thread则是并发运行代码的一个具体实现;
- Executor把任务本身和执行过程解耦,这在Thread是紧密结合在一起的;
- Executor提供了一个executor方法接受一个Runnable对象,而Thread是在构造方法里传入一个Runnable对象,这里会造成一个问题,Executor可以执行不同类型的Runnable对象,而Thread不行,这是一个非常大的区别;
这么讲比较抽象,我们来看一个实例:
|
|
输出:
|
|
这里可以看出几件事情: