Java多线程
java多线程
陌隋
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深读源码-java线程系列之总结篇
简介线程系列我们基本就学完了,这一个系列我们基本都是围绕着线程池在讲,其实关于线程还有很多东西可以讲,后面有机会我们再补充进来。重要知识点直接上图,看着这张图我相信你能够回忆起很多东西,也可以看着这张图来自己提问自己回答,当然,也可以把这张图作为面试复习的参考。其中,ThreadLocal是我们没有分析的类,放在netty系列来学习,敬请期待^^彩蛋下一个系列我们将学习netty相关的知识,当然跑不掉的还有nio。我为什么直接讲netty了呢?因为netty很重要,很多框转载 2020-06-02 16:14:08 · 194 阅读 · 0 评论 -
深读源码-java线程系列之ForkJoinPool深入解析
简介随着在硬件上多核处理器的发展和广泛使用,并发编程成为程序员必须掌握的一门技术,在面试中也经常考查面试者并发相关的知识。今天,我们就来看一道面试题:如何充分利用多核CPU,计算很大数组中所有整数的和?剖析单线程相加?我们最容易想到就是单线程相加,一个for循环搞定。线程池相加?如果进一步优化,我们会自然而然地想到使用线程池来分段相加,最后再把每个段的结果相加。其它?Yes,就是我们今天的主角——ForkJoinPool,但是它要怎么实现呢?似乎没怎么用过哈^^三种实现转载 2020-06-01 19:50:35 · 557 阅读 · 0 评论 -
深读源码-java线程系列之线程池深入解析——定时任务执行流程
简介前面我们一起学习了普通任务、未来任务的执行流程,今天我们再来学习一种新的任务——定时任务。定时任务是我们经常会用到的一种任务,它表示在未来某个时刻执行,或者未来按照某种规则重复执行的任务。问题(1)如何保证任务是在未来某个时刻才被执行?(2)如何保证任务按照某种规则重复执行?来个栗子创建一个定时线程池,用它来跑四种不同的定时任务。public class ThreadPoolTest03 { public static void main(String[] ar转载 2020-06-01 16:11:09 · 192 阅读 · 0 评论 -
深读源码-java线程系列之线程池深入解析——未来任务执行流程
简介前面我们一起学习了线程池中普通任务的执行流程,但其实线程池中还有一种任务,叫作未来任务(future task),使用它您可以获取任务执行的结果,它是怎么实现的呢?建议学习本章前先去看看之前写的《深读源码-java线程系列之自己手写一个线程池进阶版》,有助于理解本章的内容,且那边的代码比较短小,学起来相对容易一些。问题(1)线程池中的未来任务是怎么执行的?(2)我们能学到哪些比较好的设计模式?(3)对我们未来学习别的框架有什么帮助?来个栗子我们还是从一个例子入手,来讲解来转载 2020-06-01 15:05:51 · 277 阅读 · 0 评论 -
深读源码-java线程系列之线程池深入解析——普通任务执行流程
简介前面我们一起学习了Java中线程池的体系结构、构造方法和生命周期,本章我们一起来学习线程池中普通任务到底是怎么执行的。建议学习本章前先去复习之前《深读源码-java线程系列之自己手写一个线程池》这两章内容,有助于理解本章的内容,且那边的代码比较短小,学起来相对容易一些。问题(1)线程池中的普通任务是怎么执行的?(2)任务又是在哪里被执行的?(3)线程池中有哪些主要的方法?(4)如何使用Debug模式一步一步调试线程池?使用案例我们创建一个线程池,它的核心数量为5,最大转载 2020-06-01 13:35:59 · 286 阅读 · 0 评论 -
阻塞线程不同方式的对比
引子大家知道,我最近在招人,今天遇到个同学,他的源码看过一些,然后我就开始了AQS连环问。我:说说AQS的大致流程?他:AQS包含一个状态变量,一个同步队列……balabala……互斥锁balabala,共享锁balabala……我:AQS中除了同步队列,还有什么队列?他:还有个Condition,Condition中有个条件队列……我:条件队列和同步队列有什么区别?他:条件队列balabala,然后调用LockSupport.park()进入休眠,等待被唤醒,……,balaba转载 2020-05-31 21:28:46 · 333 阅读 · 0 评论 -
深读源码-java线程系列之线程池深入解析——生命周期
简介上一章我们一起重温了下线程的生命周期(六种状态还记得不?),但是你知不知道其实线程池也是有生命周期的呢?!问题(1)线程池的状态有哪些?(2)各种状态下对于任务队列中的任务有何影响?先上源码其实,在我们讲线程池体系结构的时候,讲了一些方法,比如shutDown()/shutDownNow(),它们都是与线程池的生命周期相关联的。我们先来看一下线程池ThreadPoolExecutor中定义的生命周期中的状态及相关方法:private final AtomicIntege转载 2020-05-30 07:24:22 · 318 阅读 · 0 评论 -
深读源码-java线程系列之线程的生命周期
简介大家都知道线程是有生命周期,但是网上几乎没有一篇文章讲得是完全正确的。常见的错误有:就绪状态、运行中状态(RUNNING)、死亡状态、中断状态、只有阻塞没有等待状态、流程图乱画等,最常见的错误就是说线程只有5种状态。今天这篇文章会彻底讲清楚线程的生命周期,并分析synchronized锁、基于AQS的锁中线程状态变化的逻辑。所以,对synchronized锁和AQS原理(源码)不了解的同学,请翻一下博主之前的文章先熟悉这两部分的内容,否则肯定记不住这里讲的线程生命周期。问题(1)转载 2020-05-29 18:56:26 · 181 阅读 · 0 评论 -
深读源码-java线程系列之线程池深入解析——构造方法
简介ThreadPoolExecutor的构造方法是创建线程池的入口,虽然比较简单,但是信息量很大,由此也能引发一系列的问题,同样地,这也是面试中经常被问到的问题,下面只是列举了一部分关于ThreadPoolExecutor构造方法的问题,如果你都能回答上来,则可以不用看下面的分析了。问题(1)ThreadPoolExecutor有几个构造方法?(2)ThreadPoolExecutor最长的构造方法有几个参数?(3)keepAliveTime是做什么用的?(7)核心线程会不会超时关转载 2020-05-29 18:07:07 · 221 阅读 · 0 评论 -
深读源码-java线程系列之线程池深入解析——体系结构
简介Java的线程池是块硬骨头,对线程池的源码做深入研究不仅能提高对Java整个并发编程的理解,也能提高自己在面试中的表现,增加被录取的可能性。本系列将分成很多个章节,本章作为线程池的第一章将对整个线程池体系做一个总览。体系结构上图列举了线程池中非常重要的接口和类:(1)Executor,线程池顶级接口;(2)ExecutorService,线程池次级接口,对Executor做了一些扩展,增加一些功能;(3)ScheduledExecutorService,对Executor转载 2020-05-29 17:46:33 · 245 阅读 · 0 评论 -
深读源码-java线程系列之自己手写一个线程池进阶版
问题(1)自己动手写的线程池如何支持带返回值的任务呢?(2)如果任务执行的过程中抛出异常了该怎么处理呢?简介上一章我们自己动手写了一个线程池,但是它是不支持带返回值的任务的,那么,我们自己能否实现呢?必须可以,今天我们就一起来实现带返回值任务的线程池。前情回顾首先,让我们先回顾一下上一章写的线程池:(1)它包含四个要素:核心线程数、最大线程数、任务队列、拒绝策略;(2)它具有执行无返回值任务的能力;(3)它无法处理有返回值的任务;(4)它无法处理任务执行的异常(线程中转载 2020-05-29 16:33:30 · 246 阅读 · 0 评论 -
深读源码-java线程系列之自己手写一个线程池
问题(1)自己动手写一个线程池需要考虑哪些因素?(2)自己动手写的线程池如何测试?简介线程池是Java并发编程中经常使用到的技术,那么自己如何动手写一个线程池呢?本文将手把手带你写一个可用的线程池。属性分析线程池,顾名思义它首先是一个“池”,这个池里面放的是线程,线程是用来执行任务的。首先,线程池中的线程应该是有类别的,有的是核心线程,有的是非核心线程,所以我们需要两个变量标识核心线程数量coreSize和最大线程数量maxSize。为什么要区分是否为核心线程呢?这是为了控制转载 2020-05-28 22:41:58 · 274 阅读 · 0 评论 -
深读源码-java线程系列之线程模型
问题(1)线程类型有哪些?(2)线程模型有哪些?(3)各语言使用的是哪种线程模型?简介在Java中,我们平时所说的并发编程、多线程、共享资源等概念都是与线程相关的,这里所说的线程实际上应该叫作“用户线程”,而对应到操作系统,还有另外一种线程叫作“内核线程”。用户线程位于内核之上,它的管理无需内核支持;而内核线程由操作系统来直接支持与管理。几乎所有的现代操作系统,包括 Windows、Linux、Mac OS X 和 Solaris,都支持内核线程。最终,用户线程和内核线程之间必然转载 2020-05-27 19:11:18 · 234 阅读 · 0 评论
分享