From 059c5b93a8d9c4680b05f14675731703ec6de428 Mon Sep 17 00:00:00 2001 From: "shuang.kou" Date: Thu, 16 Apr 2020 15:25:03 +0800 Subject: [PATCH] =?UTF-8?q?Create=20=E5=88=9B=E5=BB=BA=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E7=9A=84=E5=87=A0=E7=A7=8D=E6=96=B9=E5=BC=8F=E6=80=BB=E7=BB=93?= =?UTF-8?q?.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../创建线程的几种方式总结.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 docs/java/Multithread/创建线程的几种方式总结.md diff --git a/docs/java/Multithread/创建线程的几种方式总结.md b/docs/java/Multithread/创建线程的几种方式总结.md new file mode 100644 index 00000000..764a63a4 --- /dev/null +++ b/docs/java/Multithread/创建线程的几种方式总结.md @@ -0,0 +1,40 @@ +## 面试官:“创建线程有哪几种常见的方式?” + +1. 继承 Thread 类 +2. 实现 Runnable 接口 +3. 使用 Executor 框架 +4. 使用 FutureTask + +## 最简单的两种方式 + +### 1.继承 Thread 类 + + + + + +### 2.实现 Runnable 接口 + +## 比较实用的两种方式 + +### 3.使用 Executor 框架 + +Executor 框架是 Java5 之后引进的,在 Java 5 之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。 + +> 补充:this 逃逸是指在构造函数返回之前其他线程就持有该对象的引用. 调用尚未构造完全的对象的方法可能引发令人疑惑的错误。 + +Executor 框架不仅包括了线程池的管理,还提供了线程工厂、队列以及拒绝策略等,Executor 框架让并发编程变得更加简单。 + +为了能搞懂如何使用 Executor 框架创建 + +### Executor 框架结构(主要由三大部分组成) + +#### 1) 任务(`Runnable` /`Callable`) + +执行任务需要实现的 **`Runnable` 接口** 或 **`Callable`接口**。**`Runnable` 接口**或 **`Callable` 接口** 实现类都可以被 **`ThreadPoolExecutor`** 或 **`ScheduledThreadPoolExecutor`** 执行。 + +#### 2) 任务的执行(`Executor`) + +如下图所示,包括任务执行机制的核心接口 **`Executor`** ,以及继承自 `Executor` 接口的 **`ExecutorService` 接口。`ThreadPoolExecutor`** 和 **`ScheduledThreadPoolExecutor`** 这两个关键类实现了 **ExecutorService 接口**。 + +### 4.使用 FutureTask \ No newline at end of file