常见的线程使用方式

创建线程有几种方式?
面试遇到这个问题,有点懵,只知道创建线程,调用start() 方法。回来经过搜索,看到答案中的多种方法最后都是回到了 new Thread() 中,不同的方法只是使用线程来执行代码的用法不同而已。

那么,记录一下网络上所说的使用线程执行代码的几种方式。

  1. 继承 Thread 类,重载 run 方法
  2. 实现 Runnable 接口,作为参数传递给 Thread 的构造方法
  3. 实现 Callable 接口,作为参数传递给 FutureTask,然后将 FutureTask 作为参数,构建 Thread。
  4. 使用线程池

第一种,继承 Thread, 重载 run 方法,这是最基本的。
第二种,实现 Runnable 接口,作为参数构建 Thread,作为成员变量存储在 target 变量中,Thread 实现了 Runnable 接口,默认 run 实现就是 target 不为空的情况下,调用其 run 方法,在第一种方式上加了一层。
第三种,实现 Callable,查看 Thread 方法,除了线程信息,就是 Runnable,查看 FutureTask 实现了 Runnable,对应的 Callable 也是在 run 方法中调用,在第二种方法中又加了一层。
第四种,查看线程池Executors.newFixedThreadPool():ExecutorService的实现,其中的线程是通过 ThreadFactory 默认为 DefaultThreadFactory,也是通过new Thread() 实现。

所以当被问到线程的创建方式时,应该是要问你启动线程执行任务的方式,而这些启动线程的方式,也是通过 Thread 中的 run 方法完成,几种不同方式实际上只是开发中的几种常见方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值