W-M'S blog

Thinking will not overcome fear but action will.

深入学习java并发编程之Wait-Notify&CountDownLatch&CyclicBarrier对比分析

本文记录了自己对于Wait-Notify、CountDownLatch、CyclicBarrier几种并发流程控制方式的对比分析过程,仅用于个人备忘,如有错误,敬请指出。 从应用层面对比分析 具体Wait-Notify、CountDownLatch、CyclicBarrier功能介绍这里不再叙述,个人观点来看这三者都是通过等待-通知机制来实现的并发流程控制,只不过具体的操作方式有...

深入学习java并发编程之ThreadLocal

本文记录了自己对于ThreadLocal类源码的分析过程,仅用于个人备忘,如有错误,敬请指出。 前言 我们都知道ThreadLocal的作用是生成一个仅当前线程可使用的线程内局部变量,类似于下面这样: public class ThreadLocalTest { private static final ThreadLocal<Long> TIME_LOCA...

深入学习java并发编程之Object.wait及Thread.join源码分析

关于wait、notify的源码分析来源于博文Java的wait()、notify()学习三部曲之一:JVM源码分析,这篇文章内容对我而言很深入很详细,很多地方我目前还不太理解,留待以后更加仔细的解读;转载的目的是在其中增加一些目前自己的理解,仅用于备忘。Thread.join源码分析来源于博文Java线程源码解析之join。 Object.wait()、notify()源码分析...

深入学习java并发编程之Thread.sleep()及Thread.yield()源码分析

我们都知道Thread.yield()会释放CPU资源,让优先级更高(至少是相同)的线程获得执行机会;sleep当传入参数为0时,和yield相同,当传入参数大于0时,也是释放CPU资源,只不过此时可以让任何其它优先级的线程获得执行机会。为什么会这样? Thread.yield()源码分析 Thread.yield底层是通过JVM_Yield方法实现的(见jvm.cpp): JV...

深入学习java并发编程之Thread.interrupt()源码分析

本文关于Thread.interrupt() native相关方法源码分析的过程参考文章Java线程源码解析之interrupt,在文中部分地方加入了自己对于原作者文章中内容的理解,仅用于备忘。 前言 当我们在调用Thread.interrupt()方法的时候,被中断的线程通常有两种方式对中断进行响应,一种是主动响应,比如: while(!Thread.currentThread...

深入学习java并发编程之创建一个线程并start()究竟做了什么?

本文关于Thread.start0() native方法源码分析的过程来源于文章Java线程源码解析之start,在文中部分地方加入了自己对于原作者文章中内容的理解,仅用于备忘。 前言 创建一个线程并启动可以分为两个步骤,一是创建一个Thread类对象,二是调用其start方法,线程启动之后就会调用它的run()方法运行。java线程在linux上的实现是映射到底层os上的,那么...

深入学习java并发编程之Thread相关概念及其使用

本文主要介绍了自己对于java.lang.Thread类中相关API的学习及理解。 Java中线程的几种状态 NEW:一个还没开始的线程处于这种状态 RUNNABLE:一个正在执行的线程的状态;处于这种状态的线程有可能正在被虚拟机执行,也有可能在等待操作系统的其它资源(例如处理器),我觉得也可以理解为通常说的就绪状态(比如java socket.accept实现的阻塞式...

深入学习java并发编程之synchronized实现原理

本文大部分内容来源于jdk源码剖析二: 对象内存布局、synchronized终极原理,在文中部分地方加入了自己对于原作者文章中内容的理解,仅用于备忘。 启蒙知识预热 开启本文之前先介绍2个概念。 CAS操作 为了提高性能,JVM很多操作都依赖CAS实现,一种乐观锁的实现。本文锁优化中大量用到了CAS,故有必要先分析一下CAS的实现。 CAS即Compare and Swap,...