ZHENGRUI'BLOG

读书、健身、旅行


  • Home

  • Archives

  • About

  • Search

Java虚拟机(二)-- 类的加载与执行

Posted on 2018-11-08 | In Java虚拟机 | | Visitors
在我们初学Java的时候,我们的老师可能都对我们说过Java是一门平台无关的语言,Java在发布之初也提出了一个非常著名的口号:“Write once,Run anywhere!”,而这一切的关键便是Class字节码。它使得Java不再需要再关注平台的差异性,我只要生成相应的字节码,其他的交给虚拟机就行了。事实上,如今Java虚拟机不仅仅是平台无关了,还实现了语言无关;即是说,它不再是只为Java服务了,你还可在上面跑Scala,跑JRuby,跑Groovy…,可以想象以后会有越来越多的语言运行在Java虚拟机上,只要你给它提供一个字节码文件。好了,扯了这么多其实只想说明一个观点,了解虚拟机很 ...
Read more »

浅析Executor-6-CompletionService

Posted on 2018-08-07 | In Java源码浅析 | | Visitors
CompletionService用于批量任务的处理,它内部内置了一个线程池来执行任务,并使用一个队列来存储任务执行的结果。下面我们来研究一下这个类的内部实现。 源码分析我们先来看一下CompletionService的成员变量,它有三个成员变量,源码如下: 123private final Executor executor;private final AbstractExecutorService aes;private final BlockingQueue<Future<V>> completionQueue; 在这三个成员变量中,executor用于执行任务, ...
Read more »

浅析Executor-5-Executors

Posted on 2018-08-07 | In Java源码浅析 | | Visitors
Executors是Executor框架中的一个工厂类,用它我们可以创建特定的线程池,线程工厂,以及将Runnable转换为Callable等。下面我们通过源码来仔细看看这个类的工厂方法们。 ExecutorService相关Executors中有很多返回ExecutorService的方法,用于返回一个个不同类型的线程池,下面我们分别看下。 newSingleThreadExecutor 创建一个单线程的Executor。源码如下: 123456public static ExecutorService newSingleThreadExecutor() { return ...
Read more »

浅析Executor-4-ScheduledThreadPoolExecutor

Posted on 2018-08-07 | In Java源码浅析 | | Visitors
ScheduledThreadPoolExecutor继承于ThreadPoolExecutor,并实现了ScheduledExecutorService接口,它的功能与Timer类似,但是拥有比Timer更高的灵活性和更多的功能,一般推荐使用它来替代Timer,以此实现延迟或者周期性运行的任务。下面看一下它的具体实现。 源码分析我们先从它的构造函数看起,ScheduledThreadPoolExecutor有四个构造函数,可以指定不同的参数,比如核心线程数,线程工厂,拒绝策略等,其内部实现也是复用了ThreadPoolExecutor的对应构造函数,我们来看一下它的源码: 1234publi ...
Read more »

浅析Executor-3-ThreadPoolExecutor

Posted on 2018-08-05 | In Java源码浅析 | | Visitors
本文是笔者浅析Executor框架系列第三篇,主要介绍下Exector的核心实现类ThreadPoolExecutor,该类便是我们常说的线程池的实现。至于线程池的好处有很多,比如复用,统一管理,批量处理等等,这里不再赘述。本文主要探讨ThreadPoolExecutor的具体实现,看一看一个任务放入线程池后是如何被执行的。下面具体看看它们的实现。 ThreadPoolExecutor我们首先看一下如何创建一个线程池,ThreadPoolExecutor有四个发布的构造函数,其中三个会调用第四个,只是指定不同的默认实现。因此我们这里只看下第四个构造函数的实现,来了解一下构建一个线程池所需要的参 ...
Read more »

浅析Executor框架-2-FutureTask

Posted on 2018-08-02 | In Java源码浅析 | | Visitors
FutureTask继承于Future,一直到JDK1.8它都是Future的主要实现类,用于获取任务的执行结果。在JDK1.8的注释中是这样介绍这个类的。 这个类提供了一个Future的基本实现,它可以开始、取消一个任务(该任务是异步可取消的),或者查询该任务是否完成,并且可以获取任务执行的结果。这个结果只有当任务执行完成后才可被获取;获取任务结果通过它的get方法,并且该方法会被阻塞直到任务执行完成。一旦任务执行完成,它将不能被再次开始或者取消,除非通过runAndReset方法调用该任务。 FutureTask可以去包裹一个Runnable或者Callable对象,因为它实现了Runn ...
Read more »

浅析Executor

Posted on 2018-08-01 | In Java源码浅析 | | Visitors
Executor是JUC包中用于实现异步任务的框架,使用它可以有效降低并发编程的复杂性。整个框架大致可以分为三个部分:用于执行任务的Excutor,任务本身Runnable或者Callable,及异步获取执行结果的Future。下面就通过这仨个部分简单介绍下Executor的整体架构。 ExecutorExecutor接口是框架的核心,它下面有 一系列的继承体系,主要实现类有ThreadPoolExecutor和ScheduledThreadPoolExecutor和一个工具类Executors。下面看一下Executor的继承体系,两个实现类的具体实现我们在后续的文章中再详细分析。 下面我 ...
Read more »

浅析Java并发工具类(4) - Exchanger

Posted on 2018-07-25 | In Java源码浅析 | | Visitors
ExchangerExchanger是一个用于线程间交换数据的工具类,它会提供一个同步点,两个线程在这个同步点处交换数据。如果第一个线程调用exchanger方法,它会一直在此等待,直到第二个线程也进入exchanger方法,两个线程在里面交换数据,之后再各自运行下去。它可以用于遗传算法,管道设计,或者其他需要对两个线程的数据进行校对的工作。 用法示例下面通过JDK的一个示例来看看Exchanger该如何使用,然后再通过源码分析一下它的原理。示例代码如下: 123456789101112131415161718192021222324252627282930313233343536class ...
Read more »

浅析Java并发工具类(3) - Semaphore

Posted on 2018-07-25 | In Java源码浅析 | | Visitors
Semaphore是将要介绍的第三个并发工具类,用于限制访问某个公共资源的线程数量。它底层依托于AQS的实现,采用一个许可证permits来限制访问的线程的数量,只有获取许可证的线程才可访问该资源。假如只允许10个线程同时访问该资源,那就设置10个permits,如果10个permits都被占用,那么其他线程只能等待,直到有些permits被释放。下面看看它的源码实现。 源码分析Semaphore只有一个成员变量sync,它的类型是Semaphore的一个内部类,继承于AQS。这点有点类似于ReentrantLock的实现,不同点在于ReentrantLock使用的是AQS的独占模式,而Sem ...
Read more »

浅析Java并发工具类(2) - CyclicBarrier

Posted on 2018-07-23 | In Java源码浅析 | | Visitors
CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier),它的功能是让一组线程到达一个屏障(也就叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会打开,所有被屏障拦截的线程继续运行。值得一提的是,所谓的循环是指CyclicBarrier中的count是可以重置的(这点不同于CountDownLatch),因此它可以被循环调用。下面我们通过源码来分析一下这个类。 源码分析CyclicBarrier类代码并不多,布局比较简单,我们先来看一下它有哪些成员变量。它的成员变量如下: 1234567891011121314151617/** The lock for ...
Read more »
123…8
zhengrui

zhengrui

读书、健身、旅行

71 posts
15 categories
119 tags
RSS
GitHub Weibo Facebook
Links
  • 我康军的博客
  • 我的简历
© 2020 zhengrui
Powered by Hexo
Theme - NexT.Mist