diff --git a/week_05/18/Thread.md b/week_05/18/Thread.md new file mode 100644 index 0000000000000000000000000000000000000000..289891c0bbfccdd54963ce20b77d30f009453840 --- /dev/null +++ b/week_05/18/Thread.md @@ -0,0 +1,85 @@ +# Thread +## 参考 +[Thread源码分析 - 简书](https://www.jianshu.com/p/7a2c51635d4c) +[从源码的角度再学「Thread」 - 简书](https://www.jianshu.com/p/5cf0a0899b6e) +zybuluo.com/kiraSally/note/823674#111-线程组成 +[(四)Thread.join的作用和原理 - 简书](https://www.jianshu.com/p/fc51be7e5bc0) +## 数据结构 +1. Thread 类的类结构?提供了哪些实例变量以供设置? +![](Thread/5A6E17A6-73B1-41DA-B390-2A7A3D2F292F.png) + + +## 创建/初始化/启动 + 1. Thread 类的构造函数的特点?通过 init()方法会初始化哪些信息(给哪些实例变量赋值)? init 方法的执行过程? +![](Thread/18ABC9EA-0A31-4DEA-8CF3-70CF70AE58BA.png) + + +2. 创建线程的两种方式? +![](Thread/D623A1A0-3B0B-49FC-8304-BAD0E9B4D77D.png) + +3. 正常的启动线程都是调用Thread的start()方法,此时的执行过程是怎样的,start()与 run()方法的关系? +![](Thread/D1B35CFF-0605-4C13-B25B-36DEDB17CA15.png) + + +## 线程状态 +1. 线程可以处于哪几种状态,各个状态之间如何转换?注意阻塞状态分为哪三种阻塞? +![](Thread/F044EC04-CA39-47E1-A0EC-0614506B5AD3.png) + +2. 通过suspend方法和resume方法暂停/恢复线程的过程? +![](Thread/0B6D660C-0559-4AD9-8079-F0120D739ECF.png) + +3. 为什么不推荐/弃用通过suspend方法和resume方法暂停/恢复线程?存在什么问题? +![](Thread/EE9E6DBC-0087-4B1D-ABB1-A59386C96638.png) + +4. Thread 类中 yield()方法的作用和特点? +![](Thread/906E3430-7F13-401A-9A73-0B95F72DB738.png) + +5. Thread 类 sleep()方法的特点?和Object类 wait()方法的比较,相同点和不同点分别是? +![](Thread/D1167701-B8E6-491B-AE29-3728F5E289E3.png) + + + +## 线程中断 + +1. 为什么 Java 要提供中断机制?中断机制中程序要处理什么工作? +![](Thread/EDD48E00-6B4D-4B60-8CF6-1F2722C47B58.png) + +2. Thread 类中提供了哪三个和中断操作相关的方法? + +![](Thread/21FAD189-5F1D-4BD5-B88C-69EA9B78B272.png) + +3. 中断线程分为哪三种情况? +![](Thread/C026C47E-6E0A-4907-ADB6-5EB97A42B62A.png) + +4. 可以通过哪几种方式来处理中断? +![](Thread/901C8902-2732-4EFA-B88D-169B70DD1D28.png) + +5. Thread 类禁用 stop 方法的原因?使用 stop()方法会导致什么问题? +![](Thread/6226AA0E-8D4A-4AD0-8EEE-58FD71279010.png) + +## 线程优先级 +1. 如何设置线程的优先级?当前线程优先级可以设置的上限? +![](Thread/CBD32551-BBA5-41B0-9160-30769E3E8F49.png) + +2. 线程的优先级对线程调度的影响?线程的优先级具有哪些特点(优先级规则)? +![](Thread/8092BE05-9DB1-4D06-9DB3-B4432A8AFD21.png) + +## 守护线程 +1. 如何设置守护线程? + +![](Thread/F78CD643-5D55-42C2-AE96-2BDFEC90E0D7.png) +2. 守护线程具有什么样的特点?使用注意? + +![](Thread/FD7D76E5-04C8-4B37-B0A2-A440C788BF71.png) + +## 线程间通信 +1. 如何通过 Thread 类的 Sleep 方法+While(true)来实现以轮询机制的方式的线程间通信?轮询这种方式的缺点? +![](Thread/CA5E2810-1A24-41A3-97D4-FD793092914C.png) + +2. 通过 **等待/通知机制**的方式的线程间通信时,调用的**Object类的wait和notify方法**的特点? +![](Thread/EF8C3EC6-91F3-4BDC-A255-4DECE14C9DC2.png) +3. wait/notify机制运行的过程,具体说明? +![](Thread/9196C7B7-EC5B-44D7-9A22-308F06655CD7.png) + +4. 通过 Thread 类 join 方法实现的线程间通信的作用和特点,使用场景?为什么 join 方法底层要用 wait()方法实现和不用 sleep()方法呢? +![](Thread/3FFEA0E5-C0FC-48BA-AC92-287B8516336A.png) diff --git a/week_05/18/Thread/0B6D660C-0559-4AD9-8079-F0120D739ECF.png b/week_05/18/Thread/0B6D660C-0559-4AD9-8079-F0120D739ECF.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8104e99edf60757f1ef81ea82c9b1deff8639e Binary files /dev/null and b/week_05/18/Thread/0B6D660C-0559-4AD9-8079-F0120D739ECF.png differ diff --git a/week_05/18/Thread/18ABC9EA-0A31-4DEA-8CF3-70CF70AE58BA.png b/week_05/18/Thread/18ABC9EA-0A31-4DEA-8CF3-70CF70AE58BA.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4a4eaf88c4cfc7ef73d33f9cf43626cb2bd0ed Binary files /dev/null and b/week_05/18/Thread/18ABC9EA-0A31-4DEA-8CF3-70CF70AE58BA.png differ diff --git a/week_05/18/Thread/21FAD189-5F1D-4BD5-B88C-69EA9B78B272.png b/week_05/18/Thread/21FAD189-5F1D-4BD5-B88C-69EA9B78B272.png new file mode 100644 index 0000000000000000000000000000000000000000..29f8d3a7915ae36af8f4a93f6bedf6d9d3abbb0d Binary files /dev/null and b/week_05/18/Thread/21FAD189-5F1D-4BD5-B88C-69EA9B78B272.png differ diff --git a/week_05/18/Thread/3FFEA0E5-C0FC-48BA-AC92-287B8516336A.png b/week_05/18/Thread/3FFEA0E5-C0FC-48BA-AC92-287B8516336A.png new file mode 100644 index 0000000000000000000000000000000000000000..00fc7e184f91a57c6c16dccbef0b199368b24c92 Binary files /dev/null and b/week_05/18/Thread/3FFEA0E5-C0FC-48BA-AC92-287B8516336A.png differ diff --git a/week_05/18/Thread/5A6E17A6-73B1-41DA-B390-2A7A3D2F292F.png b/week_05/18/Thread/5A6E17A6-73B1-41DA-B390-2A7A3D2F292F.png new file mode 100644 index 0000000000000000000000000000000000000000..cc7dacd80ece160e6bba3e6b0e5df7be5227bd76 Binary files /dev/null and b/week_05/18/Thread/5A6E17A6-73B1-41DA-B390-2A7A3D2F292F.png differ diff --git a/week_05/18/Thread/6226AA0E-8D4A-4AD0-8EEE-58FD71279010.png b/week_05/18/Thread/6226AA0E-8D4A-4AD0-8EEE-58FD71279010.png new file mode 100644 index 0000000000000000000000000000000000000000..ee2dcb238ec0da2bf9ad81a0cc5172cce0775886 Binary files /dev/null and b/week_05/18/Thread/6226AA0E-8D4A-4AD0-8EEE-58FD71279010.png differ diff --git a/week_05/18/Thread/8092BE05-9DB1-4D06-9DB3-B4432A8AFD21.png b/week_05/18/Thread/8092BE05-9DB1-4D06-9DB3-B4432A8AFD21.png new file mode 100644 index 0000000000000000000000000000000000000000..f0655bbe445dc9b83487e7d3bc0f01f10e9df06f Binary files /dev/null and b/week_05/18/Thread/8092BE05-9DB1-4D06-9DB3-B4432A8AFD21.png differ diff --git a/week_05/18/Thread/901C8902-2732-4EFA-B88D-169B70DD1D28.png b/week_05/18/Thread/901C8902-2732-4EFA-B88D-169B70DD1D28.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb13154b20e48d031aea93d5e0a4b5b044c2739 Binary files /dev/null and b/week_05/18/Thread/901C8902-2732-4EFA-B88D-169B70DD1D28.png differ diff --git a/week_05/18/Thread/906E3430-7F13-401A-9A73-0B95F72DB738.png b/week_05/18/Thread/906E3430-7F13-401A-9A73-0B95F72DB738.png new file mode 100644 index 0000000000000000000000000000000000000000..30374ac12071edf5047d8378ab5724983f62f3c1 Binary files /dev/null and b/week_05/18/Thread/906E3430-7F13-401A-9A73-0B95F72DB738.png differ diff --git a/week_05/18/Thread/9196C7B7-EC5B-44D7-9A22-308F06655CD7.png b/week_05/18/Thread/9196C7B7-EC5B-44D7-9A22-308F06655CD7.png new file mode 100644 index 0000000000000000000000000000000000000000..1c3bcfd51a1be692fd2756d2016f097ea96f1ec6 Binary files /dev/null and b/week_05/18/Thread/9196C7B7-EC5B-44D7-9A22-308F06655CD7.png differ diff --git a/week_05/18/Thread/C026C47E-6E0A-4907-ADB6-5EB97A42B62A.png b/week_05/18/Thread/C026C47E-6E0A-4907-ADB6-5EB97A42B62A.png new file mode 100644 index 0000000000000000000000000000000000000000..14e66df5ad1ea1277d05335612625da63b809e2b Binary files /dev/null and b/week_05/18/Thread/C026C47E-6E0A-4907-ADB6-5EB97A42B62A.png differ diff --git a/week_05/18/Thread/CA5E2810-1A24-41A3-97D4-FD793092914C.png b/week_05/18/Thread/CA5E2810-1A24-41A3-97D4-FD793092914C.png new file mode 100644 index 0000000000000000000000000000000000000000..7dee7a77cf3c128dcf24798dd9a0d4629ed5f9f2 Binary files /dev/null and b/week_05/18/Thread/CA5E2810-1A24-41A3-97D4-FD793092914C.png differ diff --git a/week_05/18/Thread/CBD32551-BBA5-41B0-9160-30769E3E8F49.png b/week_05/18/Thread/CBD32551-BBA5-41B0-9160-30769E3E8F49.png new file mode 100644 index 0000000000000000000000000000000000000000..8cdce4f28952542ee61d97e27f0fa9b576df703f Binary files /dev/null and b/week_05/18/Thread/CBD32551-BBA5-41B0-9160-30769E3E8F49.png differ diff --git a/week_05/18/Thread/D1167701-B8E6-491B-AE29-3728F5E289E3.png b/week_05/18/Thread/D1167701-B8E6-491B-AE29-3728F5E289E3.png new file mode 100644 index 0000000000000000000000000000000000000000..bda19361c64257a3674e9c4753821cfd64b65bde Binary files /dev/null and b/week_05/18/Thread/D1167701-B8E6-491B-AE29-3728F5E289E3.png differ diff --git a/week_05/18/Thread/D1B35CFF-0605-4C13-B25B-36DEDB17CA15.png b/week_05/18/Thread/D1B35CFF-0605-4C13-B25B-36DEDB17CA15.png new file mode 100644 index 0000000000000000000000000000000000000000..7a27e090c2de3e21025866a2003b999fcb600388 Binary files /dev/null and b/week_05/18/Thread/D1B35CFF-0605-4C13-B25B-36DEDB17CA15.png differ diff --git a/week_05/18/Thread/D623A1A0-3B0B-49FC-8304-BAD0E9B4D77D.png b/week_05/18/Thread/D623A1A0-3B0B-49FC-8304-BAD0E9B4D77D.png new file mode 100644 index 0000000000000000000000000000000000000000..c5750e4f531ab3e295089b374d0c4fe4815a9ced Binary files /dev/null and b/week_05/18/Thread/D623A1A0-3B0B-49FC-8304-BAD0E9B4D77D.png differ diff --git a/week_05/18/Thread/EDD48E00-6B4D-4B60-8CF6-1F2722C47B58.png b/week_05/18/Thread/EDD48E00-6B4D-4B60-8CF6-1F2722C47B58.png new file mode 100644 index 0000000000000000000000000000000000000000..64949f246168f4d29315041e6024ba18b61e7ab8 Binary files /dev/null and b/week_05/18/Thread/EDD48E00-6B4D-4B60-8CF6-1F2722C47B58.png differ diff --git a/week_05/18/Thread/EE9E6DBC-0087-4B1D-ABB1-A59386C96638.png b/week_05/18/Thread/EE9E6DBC-0087-4B1D-ABB1-A59386C96638.png new file mode 100644 index 0000000000000000000000000000000000000000..78727416270b9b9c2c315d73afefeb4d71baa7ff Binary files /dev/null and b/week_05/18/Thread/EE9E6DBC-0087-4B1D-ABB1-A59386C96638.png differ diff --git a/week_05/18/Thread/EF8C3EC6-91F3-4BDC-A255-4DECE14C9DC2.png b/week_05/18/Thread/EF8C3EC6-91F3-4BDC-A255-4DECE14C9DC2.png new file mode 100644 index 0000000000000000000000000000000000000000..50967a8023b98f2f1d376646ccc2e27a210489c8 Binary files /dev/null and b/week_05/18/Thread/EF8C3EC6-91F3-4BDC-A255-4DECE14C9DC2.png differ diff --git a/week_05/18/Thread/F044EC04-CA39-47E1-A0EC-0614506B5AD3.png b/week_05/18/Thread/F044EC04-CA39-47E1-A0EC-0614506B5AD3.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c5807ac565389acad3b73a970700228574c78e Binary files /dev/null and b/week_05/18/Thread/F044EC04-CA39-47E1-A0EC-0614506B5AD3.png differ diff --git a/week_05/18/Thread/F78CD643-5D55-42C2-AE96-2BDFEC90E0D7.png b/week_05/18/Thread/F78CD643-5D55-42C2-AE96-2BDFEC90E0D7.png new file mode 100644 index 0000000000000000000000000000000000000000..6a69965cdc603856d10e5a76feb288d0d386ac68 Binary files /dev/null and b/week_05/18/Thread/F78CD643-5D55-42C2-AE96-2BDFEC90E0D7.png differ diff --git a/week_05/18/Thread/FD7D76E5-04C8-4B37-B0A2-A440C788BF71.png b/week_05/18/Thread/FD7D76E5-04C8-4B37-B0A2-A440C788BF71.png new file mode 100644 index 0000000000000000000000000000000000000000..115ec81bbdf52c19393ee1ca820e3719eca65c74 Binary files /dev/null and b/week_05/18/Thread/FD7D76E5-04C8-4B37-B0A2-A440C788BF71.png differ diff --git a/week_05/18/ThreadLocal.md b/week_05/18/ThreadLocal.md new file mode 100644 index 0000000000000000000000000000000000000000..b12a1a699974e41a675dfb448cf94414d940d1b5 --- /dev/null +++ b/week_05/18/ThreadLocal.md @@ -0,0 +1,76 @@ +# ThreadLocal +## 参考 +[并发番@ThreadLocal一文通(1.7版) - 作业部落 Cmd Markdown 编辑阅读器](https://www.zybuluo.com/kiraSally/note/854555) +[这才是 Thread Local 的正确原理与适用场景 根本没有内存泄漏 | 技术世界 | java,thread local,java 8,CAS,多线程,并发,技术世界,郭俊 Jason](http://www.jasongj.com/java/threadlocal/) +[转-ThreadLocal源码解读(大牛之作) - 简书](https://www.jianshu.com/p/6e4233f96532) +[(八)ThreadLocal的使用及原理分析 - 简书](https://www.jianshu.com/p/b2495b136fd7) +[阿里架构师浅析ThreadLocal源码——黄金分割数的使用-爱码仕i的博客-51CTO博客](https://blog.51cto.com/14409778/2416835) +[ThreadLocal面试攻略:吃透它的每一个细节和设计原理 - 每日头条](https://kknews.cc/code/pv33abp.html) +[阿里架构师浅析ThreadLocal源码——黄金分割数的使用-爱码仕i的博客-51CTO博客](https://blog.51cto.com/14409778/2416835) +[一篇文章,从源码深入详解ThreadLocal内存泄漏问题 - 简书](https://www.jianshu.com/p/86ecbab69432) +## Why use + 1. ThreadLocal解决了什么问题? ThreadLocal的使用场景? +![](ThreadLocal/6BC04B2D-BD91-4BC9-8C20-829FE988D741.png) + +## 数据结构 +1. ThreadLocal 的类结构,内部结构? +![](ThreadLocal/0E7F8CE3-F613-4F17-9B07-38D737B57B81.png) + + +## ThreadLocalMap +1. ThreadLocal中的静态内部类ThreadLocalMap是什么? +![](ThreadLocal/30C8A3F3-04B6-4318-B8A6-34779D9A0688.png) + + +2. ThreadLocal中的静态内部类ThreadLocalMap类的静态内部类Entry便是ThreadLocalMap里定义的节点,它继承了WeakReference类,为什么要定义成弱引用?定义成弱引用可以防止什么问题? + +![](ThreadLocal/35173306-755C-49E9-BB13-D2F81C568B98.png) + +3. ThreadLocalMap**是在哪里构造?** 构造的具体过程? +![](ThreadLocal/F0149697-1C19-4A86-BFEE-B9E89C7DD9EC.png) + +4. 在构造ThreadLocalMap时,使用this作为key来存储,那么对于同一个ThreadLocal对象,如果同一个Thread中存储了多个值,是如何来区分存储的呢? +![](ThreadLocal/52F0267C-C594-44F3-B700-5574BAB6F231.png) +5. 为什么ThreadLocalMap 采用开放地址法来解决哈希冲突?这种方式解决哈希冲突的优缺点(尤其要理解缺点,因为针对这些缺点在实现的时候都需要在代码里一一处理)? +![](ThreadLocal/FC78BFCA-C0FA-40D0-87E7-7599EC77216B.png) + + +## Set + 1. ThreadLocal中什么是StaleEntry(过期槽位),过期槽位的特点,调用 set 方法时针对过期槽位要如何处理? +![](ThreadLocal/578D5098-CE48-4126-8925-DFCEAB515210.png) + + 3. ThreadLocal 中 set 方法调用的replaceStaleEntry方法来替换过期槽位的Entry的执行过程中,*遍历staleSlot之后的哈希槽,如果Key匹配*的情况,为什么要跟后面 key 匹配的槽位交换槽位,而不是直接在当前的过期槽位设置值? + - 插入 key= 5的情况 +![](ThreadLocal/3BB82EF6-4CA0-4449-B2F3-AC53F3783583.png) + +4. ThreadLocal 中 set 方法线性探索时,如果 key 为 null,则调用的replaceStaleEntry方法来替换过期槽位的Entry的执行过程中? +![](ThreadLocal/319D31CF-E194-4EB3-89DC-5F9AD6D521C2.png) + +5. ThreadLocal 中 set 方法执行的整理流程? +![](ThreadLocal/1A4DAF72-DFD5-49A3-96A5-AD7FBD9A2F25.png) +6. ThreadLocal 中 set 方法中调用cleanSomeSlots进行启发式搜素*寻找过期槽点*,然后调用expungeStaleEntry执行一次全量清理,其中cleanSomeSlots(int i,int n)的执行过程和原理是怎样的?其中参数 i,n 的意义?调用cleanSomeSlots的场景?为什么要用启发式搜索? +![](ThreadLocal/FE4FDE97-E878-4B5B-96F8-49FA44087E45.png) + +7. ThreadLocal 中 set 方法中调用cleanSomeSlots进行启发式搜素*寻找过期槽点*,然后调用expungeStaleEntry执行一次全量清理的完整过程和特点? +![](ThreadLocal/0906E50F-8AFD-45CF-BBCD-BE2150B7A9D3.png) + +8. ThreadLocal 中 set 方法中调用的执行一次全量清理的方法**expungeStaleEntry**的执行过程?为什么清理的时候如果key 存在需要重新计算key在Entry 数组中的下标索引? +![](ThreadLocal/FEF53E85-2AFD-43B2-8769-DAD0B1CBA0FC.png) + +9. ThreadLocal 中 set 方法线性探索时,如果 key 为 null,则调用的replaceStaleEntry方法来替换过期槽位的Entry的执行过程的特点?会遇到哪四种情况? +![](ThreadLocal/C7F5F317-D54B-4201-B224-B002015BD770.png) + +## 其它 +1. ThreadLocal 中get 方法执行的整理流程? +![](ThreadLocal/60F2919F-F5A9-4D24-A504-2E5A31EC710D.png) + + +2. ThreadLocal 中remove 方法执行的整理流程? + +![](ThreadLocal/375D888D-E0AB-4381-B900-4AD4D6CCE448.png) + + +## 内存泄露 + 1. ThreadLocal 使用不当的时候为什么会导致内存泄露?哪些不当操作会导致内存泄露?如何验证?如何防止内存泄露? + +![](ThreadLocal/ADDC7ACF-3988-455A-B87D-3C7E6B7A9013.png) \ No newline at end of file diff --git a/week_05/18/ThreadLocal/0906E50F-8AFD-45CF-BBCD-BE2150B7A9D3.png b/week_05/18/ThreadLocal/0906E50F-8AFD-45CF-BBCD-BE2150B7A9D3.png new file mode 100644 index 0000000000000000000000000000000000000000..99ca1eb1a00684db8840483a209bc2265c3ac2fb Binary files /dev/null and b/week_05/18/ThreadLocal/0906E50F-8AFD-45CF-BBCD-BE2150B7A9D3.png differ diff --git a/week_05/18/ThreadLocal/0E7F8CE3-F613-4F17-9B07-38D737B57B81.png b/week_05/18/ThreadLocal/0E7F8CE3-F613-4F17-9B07-38D737B57B81.png new file mode 100644 index 0000000000000000000000000000000000000000..6d4809a15aa8b9d8030d8238c60d44073e62ceba Binary files /dev/null and b/week_05/18/ThreadLocal/0E7F8CE3-F613-4F17-9B07-38D737B57B81.png differ diff --git a/week_05/18/ThreadLocal/1A4DAF72-DFD5-49A3-96A5-AD7FBD9A2F25.png b/week_05/18/ThreadLocal/1A4DAF72-DFD5-49A3-96A5-AD7FBD9A2F25.png new file mode 100644 index 0000000000000000000000000000000000000000..91d399aeb16ae5c4ab7617e6c011b5ab3a5ae757 Binary files /dev/null and b/week_05/18/ThreadLocal/1A4DAF72-DFD5-49A3-96A5-AD7FBD9A2F25.png differ diff --git a/week_05/18/ThreadLocal/30C8A3F3-04B6-4318-B8A6-34779D9A0688.png b/week_05/18/ThreadLocal/30C8A3F3-04B6-4318-B8A6-34779D9A0688.png new file mode 100644 index 0000000000000000000000000000000000000000..b6d95c9a42ad8d1761bf81e82041270c6b6f8447 Binary files /dev/null and b/week_05/18/ThreadLocal/30C8A3F3-04B6-4318-B8A6-34779D9A0688.png differ diff --git a/week_05/18/ThreadLocal/319D31CF-E194-4EB3-89DC-5F9AD6D521C2.png b/week_05/18/ThreadLocal/319D31CF-E194-4EB3-89DC-5F9AD6D521C2.png new file mode 100644 index 0000000000000000000000000000000000000000..76e43e8fd274a48892284160d6c1be1f28998496 Binary files /dev/null and b/week_05/18/ThreadLocal/319D31CF-E194-4EB3-89DC-5F9AD6D521C2.png differ diff --git a/week_05/18/ThreadLocal/35173306-755C-49E9-BB13-D2F81C568B98.png b/week_05/18/ThreadLocal/35173306-755C-49E9-BB13-D2F81C568B98.png new file mode 100644 index 0000000000000000000000000000000000000000..c08714b1a7abb304cc4d2ca569bf53155fc121ee Binary files /dev/null and b/week_05/18/ThreadLocal/35173306-755C-49E9-BB13-D2F81C568B98.png differ diff --git a/week_05/18/ThreadLocal/375D888D-E0AB-4381-B900-4AD4D6CCE448.png b/week_05/18/ThreadLocal/375D888D-E0AB-4381-B900-4AD4D6CCE448.png new file mode 100644 index 0000000000000000000000000000000000000000..061afdadb0c798c3b18f0fd1a66fd462203b7267 Binary files /dev/null and b/week_05/18/ThreadLocal/375D888D-E0AB-4381-B900-4AD4D6CCE448.png differ diff --git a/week_05/18/ThreadLocal/3BB82EF6-4CA0-4449-B2F3-AC53F3783583.png b/week_05/18/ThreadLocal/3BB82EF6-4CA0-4449-B2F3-AC53F3783583.png new file mode 100644 index 0000000000000000000000000000000000000000..549ee9d09a9374945fab0d412c65230f21485040 Binary files /dev/null and b/week_05/18/ThreadLocal/3BB82EF6-4CA0-4449-B2F3-AC53F3783583.png differ diff --git a/week_05/18/ThreadLocal/52F0267C-C594-44F3-B700-5574BAB6F231.png b/week_05/18/ThreadLocal/52F0267C-C594-44F3-B700-5574BAB6F231.png new file mode 100644 index 0000000000000000000000000000000000000000..506d7f2a45692aaea858d6a071656dd1dc0254ed Binary files /dev/null and b/week_05/18/ThreadLocal/52F0267C-C594-44F3-B700-5574BAB6F231.png differ diff --git a/week_05/18/ThreadLocal/578D5098-CE48-4126-8925-DFCEAB515210.png b/week_05/18/ThreadLocal/578D5098-CE48-4126-8925-DFCEAB515210.png new file mode 100644 index 0000000000000000000000000000000000000000..3898c4af8b9f19cb92671f581c0cd0b9d9bbd0dc Binary files /dev/null and b/week_05/18/ThreadLocal/578D5098-CE48-4126-8925-DFCEAB515210.png differ diff --git a/week_05/18/ThreadLocal/60F2919F-F5A9-4D24-A504-2E5A31EC710D.png b/week_05/18/ThreadLocal/60F2919F-F5A9-4D24-A504-2E5A31EC710D.png new file mode 100644 index 0000000000000000000000000000000000000000..22d68ac89e9d7035501fe66f44195f9dbaa13260 Binary files /dev/null and b/week_05/18/ThreadLocal/60F2919F-F5A9-4D24-A504-2E5A31EC710D.png differ diff --git a/week_05/18/ThreadLocal/6BC04B2D-BD91-4BC9-8C20-829FE988D741.png b/week_05/18/ThreadLocal/6BC04B2D-BD91-4BC9-8C20-829FE988D741.png new file mode 100644 index 0000000000000000000000000000000000000000..82fa50275e6f8548b9071d2a6ef25a12ff6aa040 Binary files /dev/null and b/week_05/18/ThreadLocal/6BC04B2D-BD91-4BC9-8C20-829FE988D741.png differ diff --git a/week_05/18/ThreadLocal/ADDC7ACF-3988-455A-B87D-3C7E6B7A9013.png b/week_05/18/ThreadLocal/ADDC7ACF-3988-455A-B87D-3C7E6B7A9013.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6d5b00b8c8f38d6af90bda8ec159a36af1362d Binary files /dev/null and b/week_05/18/ThreadLocal/ADDC7ACF-3988-455A-B87D-3C7E6B7A9013.png differ diff --git a/week_05/18/ThreadLocal/C7F5F317-D54B-4201-B224-B002015BD770.png b/week_05/18/ThreadLocal/C7F5F317-D54B-4201-B224-B002015BD770.png new file mode 100644 index 0000000000000000000000000000000000000000..e985f4d452d1580cd1201c1abb54be135f8f25c6 Binary files /dev/null and b/week_05/18/ThreadLocal/C7F5F317-D54B-4201-B224-B002015BD770.png differ diff --git a/week_05/18/ThreadLocal/F0149697-1C19-4A86-BFEE-B9E89C7DD9EC.png b/week_05/18/ThreadLocal/F0149697-1C19-4A86-BFEE-B9E89C7DD9EC.png new file mode 100644 index 0000000000000000000000000000000000000000..51f729db952e211402c9cd803793e115bc44f3b7 Binary files /dev/null and b/week_05/18/ThreadLocal/F0149697-1C19-4A86-BFEE-B9E89C7DD9EC.png differ diff --git a/week_05/18/ThreadLocal/FC78BFCA-C0FA-40D0-87E7-7599EC77216B.png b/week_05/18/ThreadLocal/FC78BFCA-C0FA-40D0-87E7-7599EC77216B.png new file mode 100644 index 0000000000000000000000000000000000000000..b8ca3058a8002059f49386e8cbf3e4bab61b6b91 Binary files /dev/null and b/week_05/18/ThreadLocal/FC78BFCA-C0FA-40D0-87E7-7599EC77216B.png differ diff --git a/week_05/18/ThreadLocal/FE4FDE97-E878-4B5B-96F8-49FA44087E45.png b/week_05/18/ThreadLocal/FE4FDE97-E878-4B5B-96F8-49FA44087E45.png new file mode 100644 index 0000000000000000000000000000000000000000..3117bf8bef1e5475ffb8014c010068422007c053 Binary files /dev/null and b/week_05/18/ThreadLocal/FE4FDE97-E878-4B5B-96F8-49FA44087E45.png differ diff --git a/week_05/18/ThreadLocal/FEF53E85-2AFD-43B2-8769-DAD0B1CBA0FC.png b/week_05/18/ThreadLocal/FEF53E85-2AFD-43B2-8769-DAD0B1CBA0FC.png new file mode 100644 index 0000000000000000000000000000000000000000..d1f1e1af788d9088c55f2f8b52a7a7fce172b582 Binary files /dev/null and b/week_05/18/ThreadLocal/FEF53E85-2AFD-43B2-8769-DAD0B1CBA0FC.png differ diff --git a/week_05/18/ThreadPoolExecutor.md b/week_05/18/ThreadPoolExecutor.md new file mode 100644 index 0000000000000000000000000000000000000000..f9aa7af3a6bc8b8548616fa5bf1ed44a4f592236 --- /dev/null +++ b/week_05/18/ThreadPoolExecutor.md @@ -0,0 +1,96 @@ +# ThreadPoolExecutor + + +## 参考 +[并发番@ThreadPoolExecutor一文通(1.8版) - 作业部落 Cmd Markdown 编辑阅读器](https://www.zybuluo.com/kiraSally/note/990993) +- - - - + +[ThreadPoolExecutor 源码剖析 - 开发者头条](https://toutiao.io/posts/xvdwgc/preview) +[深度解读 java 线程池设计思想及源码实现_Javadoop](https://javadoop.com/post/java-thread-pool) +https://blog.csdn.net/ShiXueTanLang/article/details/78888262 + +## Why use + +1. 通过案例比较“单纯使用线程的方案”和“使用ThreadPoolExecutor线程池的方案”,在解决问题上有什么区别? + +![](ThreadPoolExecutor/D4F6F62E-A2D1-44EB-B16C-7653FFF8E0A4.png) + +2. 使用 Java 线程池带来的好处? + +![](ThreadPoolExecutor/0F76C1CC-10A8-4705-BBDF-388F32AD82F4.png) + +## 线程池状态 +1. ThreadPoolExecutor(线程池)的生命周期中有哪5种线程池状态? +![](ThreadPoolExecutor/D9FD48F2-6C21-4415-95C0-6B6138A62A7D.png) + +2. ThreadPoolExecutor中如何记录线程池的状态的? +![](ThreadPoolExecutor/6A266278-8957-420F-BCEB-A03E2FE1FAFC.png) +3. ThreadPoolExecutor中如何记录线程池的running状态的状态码是如何计算出来的? +![](ThreadPoolExecutor/EF8EA029-E524-4178-8F7B-A1C0EE418D36.png) + + +4. 在ThreadPoolExecutor线程池的设计中,把整个任务执行框架线程池划分为5个生命周期,这些不同的状态之间如何转换的? +![](ThreadPoolExecutor/A6790B22-470C-4E1A-B046-6C521B5937C8.png) +5. ThreadPoolExecutor中如何获取线程池的运行状态runState和当前有效线程数目? +![](ThreadPoolExecutor/9616F725-1BD4-43A8-B110-67B791BD67E4.png) + + +## 数据结构 +1. 线程池ThreadPoolExecutor的类图关系? +![](ThreadPoolExecutor/CEC2E0C6-6680-42E3-8908-F7781DFE731D.png) + +2. **Worker是线程池(ThreadPoolExecutor)的内部类**,它的数据结构是怎样的?为什么这么设计 + +![](ThreadPoolExecutor/249FB89C-015F-467E-9D2E-967D031CE8B5.png) + +3. ThreadPoolExecutor中 Worker 内部类**如何控制中断?** +![](ThreadPoolExecutor/9B2A64F8-8C0A-4CC7-A545-601319B4F8D8.png) + +4. ThreadPoolExecutor中 Worker 内部类**为什么Worker不被设计成可重入锁?** +![](ThreadPoolExecutor/61B0D753-4DF1-42F8-9F49-CE9AF4469146.png) +![](ThreadPoolExecutor/B41A176A-224C-4760-B8EA-13BCB41FFE3B.png) + +## 线程池 +1. 如何创建一个线程池?实例化一个线程池,实际上是对哪7个属性进行赋值? +![](ThreadPoolExecutor/26C7F6F0-984C-4E43-8A1B-D390923C640D.png) + +2. ThreadPoolExecutor线程池中**keepAliveTime**属性的特点? +![](ThreadPoolExecutor/F46D33A8-888A-491E-BCCF-743A1CC446E2.png) + +3. ThreadPoolExecutor线程池中**corePoolSize**属性的特点? +![](ThreadPoolExecutor/DBB4E3AC-72F5-480B-A791-C84AB0AE24B9.png) + +4. ThreadPoolExecutor线程池中**workQueue**(任务队列)属性的特点?什么时候线程池选择增加线程来处理任务?什么时候线程池选择用任务队列来处理任务? +![](ThreadPoolExecutor/D0C6231A-4DB8-47D7-AE89-E1536909E903.png) + +5. 线程池实现原理?为什么这么设计? +![](ThreadPoolExecutor/7C75665F-54DC-430C-8AF2-F81C8742C0A7.png) + + +## 任务提交与执行 +1. ThreadPoolExecutor线程池提交任务,调用 execute 方法时会遇到的三种情况? +![](ThreadPoolExecutor/9B9507BD-1F5F-44DD-9973-DC8789525979.png) + +2. ThreadPoolExecutor线程池执行任务,调用 addWorker 方法*在线程池中创建一个新的线程并执行*的调用过程是怎样的? +![](ThreadPoolExecutor/5A450721-73A7-4B26-B0B2-75E5B397B4DD.png) + +3. ThreadPoolExecutor线程池执行任务,调用 addWorker 方法*在线程池中创建一个新的线程并执行*,*哪两种情况是允许添加work进入works集合*?(何时新增Worker才是有意义的呢?传入一个空任务的目的是什么?) + +![](ThreadPoolExecutor/5D83C12A-423F-40BD-9E6A-9E53FF3AE05E.png) + +4. ThreadPoolExecutor线程池执行任务,最终调用的真正执行任务的方法runWorker的执行流程?**为什么新任务不直接放入任务队列而是被新线程执行呢?** +![](ThreadPoolExecutor/07B64BC9-0644-40C2-8A48-86D49526045B.png) + +5. ThreadPoolExecutor线程池执行任务,最终调用的获取任务的方法getTask的执行流程?** +![](ThreadPoolExecutor/DE507B17-6DE2-44AE-967C-6542DBF01EC5.png) + +## 关闭线程池 +1. ThreadPoolExecutor中shutdown方法有序的关闭线程池的过程? +![](ThreadPoolExecutor/5A8FD7E5-D637-404C-B0D7-36C4241482F7.png) + +2. ThreadPoolExecutor中**shutdownNow**方法立即关闭线程池的过程? +![](ThreadPoolExecutor/51CF28FB-D9A1-4BD8-96A9-5E04F427EB25.png) + +3. ThreadPoolExecutor中**当关闭线程池时,awaitTermination()会一直阻塞直到哪三种情况之一的出现**? +![](ThreadPoolExecutor/22F62F9F-9EAA-4043-B19B-5AC2C3718489.png) + diff --git a/week_05/18/ThreadPoolExecutor/07B64BC9-0644-40C2-8A48-86D49526045B.png b/week_05/18/ThreadPoolExecutor/07B64BC9-0644-40C2-8A48-86D49526045B.png new file mode 100644 index 0000000000000000000000000000000000000000..872272c24e7a9a12d4208d5ac9685cc128ae2408 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/07B64BC9-0644-40C2-8A48-86D49526045B.png differ diff --git a/week_05/18/ThreadPoolExecutor/0F76C1CC-10A8-4705-BBDF-388F32AD82F4.png b/week_05/18/ThreadPoolExecutor/0F76C1CC-10A8-4705-BBDF-388F32AD82F4.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2221356054d160f97bed2803d69a59ba6d9429 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/0F76C1CC-10A8-4705-BBDF-388F32AD82F4.png differ diff --git a/week_05/18/ThreadPoolExecutor/22F62F9F-9EAA-4043-B19B-5AC2C3718489.png b/week_05/18/ThreadPoolExecutor/22F62F9F-9EAA-4043-B19B-5AC2C3718489.png new file mode 100644 index 0000000000000000000000000000000000000000..1952492c5c6b65534013b9f1416d07a6233bedc9 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/22F62F9F-9EAA-4043-B19B-5AC2C3718489.png differ diff --git a/week_05/18/ThreadPoolExecutor/249FB89C-015F-467E-9D2E-967D031CE8B5.png b/week_05/18/ThreadPoolExecutor/249FB89C-015F-467E-9D2E-967D031CE8B5.png new file mode 100644 index 0000000000000000000000000000000000000000..332eaa12d3d159cab0870fb59d3d0e9e569b04ef Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/249FB89C-015F-467E-9D2E-967D031CE8B5.png differ diff --git a/week_05/18/ThreadPoolExecutor/26C7F6F0-984C-4E43-8A1B-D390923C640D.png b/week_05/18/ThreadPoolExecutor/26C7F6F0-984C-4E43-8A1B-D390923C640D.png new file mode 100644 index 0000000000000000000000000000000000000000..869cd011e57316a373f7a07947849a4d985443c1 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/26C7F6F0-984C-4E43-8A1B-D390923C640D.png differ diff --git a/week_05/18/ThreadPoolExecutor/51CF28FB-D9A1-4BD8-96A9-5E04F427EB25.png b/week_05/18/ThreadPoolExecutor/51CF28FB-D9A1-4BD8-96A9-5E04F427EB25.png new file mode 100644 index 0000000000000000000000000000000000000000..e114924f27aec716ddfb872ca470bb4bfaf72ee1 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/51CF28FB-D9A1-4BD8-96A9-5E04F427EB25.png differ diff --git a/week_05/18/ThreadPoolExecutor/5A450721-73A7-4B26-B0B2-75E5B397B4DD.png b/week_05/18/ThreadPoolExecutor/5A450721-73A7-4B26-B0B2-75E5B397B4DD.png new file mode 100644 index 0000000000000000000000000000000000000000..c31d170aa3264af951ed63917db6e30ad3b49090 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/5A450721-73A7-4B26-B0B2-75E5B397B4DD.png differ diff --git a/week_05/18/ThreadPoolExecutor/5A8FD7E5-D637-404C-B0D7-36C4241482F7.png b/week_05/18/ThreadPoolExecutor/5A8FD7E5-D637-404C-B0D7-36C4241482F7.png new file mode 100644 index 0000000000000000000000000000000000000000..60daf00819160359638f158e89a2788546555391 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/5A8FD7E5-D637-404C-B0D7-36C4241482F7.png differ diff --git a/week_05/18/ThreadPoolExecutor/5D83C12A-423F-40BD-9E6A-9E53FF3AE05E.png b/week_05/18/ThreadPoolExecutor/5D83C12A-423F-40BD-9E6A-9E53FF3AE05E.png new file mode 100644 index 0000000000000000000000000000000000000000..4c9ee6e1b832b78314bccf7315ef3ffc1c3acf9d Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/5D83C12A-423F-40BD-9E6A-9E53FF3AE05E.png differ diff --git a/week_05/18/ThreadPoolExecutor/61B0D753-4DF1-42F8-9F49-CE9AF4469146.png b/week_05/18/ThreadPoolExecutor/61B0D753-4DF1-42F8-9F49-CE9AF4469146.png new file mode 100644 index 0000000000000000000000000000000000000000..c0f8d73ba89f841cbe71b8b24b584bd9f7a70779 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/61B0D753-4DF1-42F8-9F49-CE9AF4469146.png differ diff --git a/week_05/18/ThreadPoolExecutor/6A266278-8957-420F-BCEB-A03E2FE1FAFC.png b/week_05/18/ThreadPoolExecutor/6A266278-8957-420F-BCEB-A03E2FE1FAFC.png new file mode 100644 index 0000000000000000000000000000000000000000..fd732c44abdffcb1677469050151ed8a65275aa6 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/6A266278-8957-420F-BCEB-A03E2FE1FAFC.png differ diff --git a/week_05/18/ThreadPoolExecutor/7C75665F-54DC-430C-8AF2-F81C8742C0A7.png b/week_05/18/ThreadPoolExecutor/7C75665F-54DC-430C-8AF2-F81C8742C0A7.png new file mode 100644 index 0000000000000000000000000000000000000000..0968a08ff70d3ee575b811fb1a03cf3ae7448e89 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/7C75665F-54DC-430C-8AF2-F81C8742C0A7.png differ diff --git a/week_05/18/ThreadPoolExecutor/9616F725-1BD4-43A8-B110-67B791BD67E4.png b/week_05/18/ThreadPoolExecutor/9616F725-1BD4-43A8-B110-67B791BD67E4.png new file mode 100644 index 0000000000000000000000000000000000000000..29c9729e6298798ec4271fa59d1754f6c8e20967 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/9616F725-1BD4-43A8-B110-67B791BD67E4.png differ diff --git a/week_05/18/ThreadPoolExecutor/9B2A64F8-8C0A-4CC7-A545-601319B4F8D8.png b/week_05/18/ThreadPoolExecutor/9B2A64F8-8C0A-4CC7-A545-601319B4F8D8.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e33712c8803b3d3032da758173bc2b450d7770 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/9B2A64F8-8C0A-4CC7-A545-601319B4F8D8.png differ diff --git a/week_05/18/ThreadPoolExecutor/9B9507BD-1F5F-44DD-9973-DC8789525979.png b/week_05/18/ThreadPoolExecutor/9B9507BD-1F5F-44DD-9973-DC8789525979.png new file mode 100644 index 0000000000000000000000000000000000000000..27695d5b0fa485ab2f9f19dcb98869f30f879833 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/9B9507BD-1F5F-44DD-9973-DC8789525979.png differ diff --git a/week_05/18/ThreadPoolExecutor/A6790B22-470C-4E1A-B046-6C521B5937C8.png b/week_05/18/ThreadPoolExecutor/A6790B22-470C-4E1A-B046-6C521B5937C8.png new file mode 100644 index 0000000000000000000000000000000000000000..1047b9d4172c64bc8a00158942cd4b6df6f60d1e Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/A6790B22-470C-4E1A-B046-6C521B5937C8.png differ diff --git a/week_05/18/ThreadPoolExecutor/B41A176A-224C-4760-B8EA-13BCB41FFE3B.png b/week_05/18/ThreadPoolExecutor/B41A176A-224C-4760-B8EA-13BCB41FFE3B.png new file mode 100644 index 0000000000000000000000000000000000000000..7a43fcadc3118dcf374470e6c7a63cdc14f5ac5d Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/B41A176A-224C-4760-B8EA-13BCB41FFE3B.png differ diff --git a/week_05/18/ThreadPoolExecutor/CEC2E0C6-6680-42E3-8908-F7781DFE731D.png b/week_05/18/ThreadPoolExecutor/CEC2E0C6-6680-42E3-8908-F7781DFE731D.png new file mode 100644 index 0000000000000000000000000000000000000000..5d77300b89530852a436ad7d6f318136ed8b322d Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/CEC2E0C6-6680-42E3-8908-F7781DFE731D.png differ diff --git a/week_05/18/ThreadPoolExecutor/D0C6231A-4DB8-47D7-AE89-E1536909E903.png b/week_05/18/ThreadPoolExecutor/D0C6231A-4DB8-47D7-AE89-E1536909E903.png new file mode 100644 index 0000000000000000000000000000000000000000..235012c12a4e11f493d361c024a14278cf945e66 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/D0C6231A-4DB8-47D7-AE89-E1536909E903.png differ diff --git a/week_05/18/ThreadPoolExecutor/D4F6F62E-A2D1-44EB-B16C-7653FFF8E0A4.png b/week_05/18/ThreadPoolExecutor/D4F6F62E-A2D1-44EB-B16C-7653FFF8E0A4.png new file mode 100644 index 0000000000000000000000000000000000000000..a05cbdf35dddf0eceab9c5a8439d9ca8bd45e84e Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/D4F6F62E-A2D1-44EB-B16C-7653FFF8E0A4.png differ diff --git a/week_05/18/ThreadPoolExecutor/D9FD48F2-6C21-4415-95C0-6B6138A62A7D.png b/week_05/18/ThreadPoolExecutor/D9FD48F2-6C21-4415-95C0-6B6138A62A7D.png new file mode 100644 index 0000000000000000000000000000000000000000..a8afbd4f15869abb7da03de4f7cd98c8522ede51 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/D9FD48F2-6C21-4415-95C0-6B6138A62A7D.png differ diff --git a/week_05/18/ThreadPoolExecutor/DBB4E3AC-72F5-480B-A791-C84AB0AE24B9.png b/week_05/18/ThreadPoolExecutor/DBB4E3AC-72F5-480B-A791-C84AB0AE24B9.png new file mode 100644 index 0000000000000000000000000000000000000000..3c47d9b19af88f6f19d47a84af0b195208637481 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/DBB4E3AC-72F5-480B-A791-C84AB0AE24B9.png differ diff --git a/week_05/18/ThreadPoolExecutor/DE507B17-6DE2-44AE-967C-6542DBF01EC5.png b/week_05/18/ThreadPoolExecutor/DE507B17-6DE2-44AE-967C-6542DBF01EC5.png new file mode 100644 index 0000000000000000000000000000000000000000..d072e60ff264574102745df80e7e4d052998f6aa Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/DE507B17-6DE2-44AE-967C-6542DBF01EC5.png differ diff --git a/week_05/18/ThreadPoolExecutor/EF8EA029-E524-4178-8F7B-A1C0EE418D36.png b/week_05/18/ThreadPoolExecutor/EF8EA029-E524-4178-8F7B-A1C0EE418D36.png new file mode 100644 index 0000000000000000000000000000000000000000..e6d1cffccdee2926932e232283df87dbf6f6cd5e Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/EF8EA029-E524-4178-8F7B-A1C0EE418D36.png differ diff --git a/week_05/18/ThreadPoolExecutor/F46D33A8-888A-491E-BCCF-743A1CC446E2.png b/week_05/18/ThreadPoolExecutor/F46D33A8-888A-491E-BCCF-743A1CC446E2.png new file mode 100644 index 0000000000000000000000000000000000000000..02b3cbd0cf74a2ebb0f358c2cb762ba702799b30 Binary files /dev/null and b/week_05/18/ThreadPoolExecutor/F46D33A8-888A-491E-BCCF-743A1CC446E2.png differ