关于Java创建线程的方式,网上主流看法是三种或四种 ,即 :runnable,thread ,Executor 和 Callable;觉得这个说法不够准确,所以对这四个东西做个说明:
runnable 不用多说 ,在java源码中 ,Thread 也是通过实现 runnable 接口创建,Thread 类完成对Runnable接口的复杂封装, 与我们直接实现Runnable接口的类无本质区别;
Executor :管理Thread的,它使用到 ThreadFactory 接口,这个接口只有一个方法 Thread newThread(Runnable r) ,它的一个实现如下:
public Thread newThread(Runnable r) {
Thread t = new Thread(group, r,
namePrefix + threadNumber.getAndIncrement(),
0);
if (t.isDaemon())
t.setDaemon(false);
if (t.getPriority() != Thread.NORM_PRIORITY)
t.setPriority(Thread.NORM_PRIORITY);
return t;
}
Callable :不同于Runnable 的一个接口,它的call()方法可以有返回值,使用ExecutorService.submit()方法调用,submit()会产生Future对象,调用get()获取返回结果;
综上,严格意义上的线程创建方式,个人认为 是 通过 Runnable和 Callable 两个接口创建