05 2017 档案
摘要:最近看多线程的时候发现对于join的理解有些错误,在网上查了不少资料,根据自己的理解整理了一下,这里之所以把join和wait放在一起,是因为join的底层实现就是基于wait的,一并讲解更容易理解。 wait 了解join就先需要了解wait,wait是线程间通信常用的信号量,作用就是让线程暂时停
阅读全文
摘要:ThreadLocal不是一个线程类,无法像Thread一样调用start()创建多线程,严格意义上说是一个线程局部变量,源码上有以下说明 / This class provides thread local variables. These variables differ from their
阅读全文
摘要:之前对于synchronized的实现和运用有所了解,但是也发现了一些缺陷,由于synchronized是在JVM层面上实现同步互斥,是以关键字形式加锁,导致其颗粒度过大,有的时候不需要这么大范围的加锁,在中断和线程阻塞处理上也有所欠缺,在JDK1.5之后,Java引入了Lock,作为对于synch
阅读全文
摘要:HashMap是Java Collection Framework重要成员,也是基于哈希表使用最多的Collection,以key value形式存储数据,但由于其线程不安全性不用于多线程编程,但用途依然广泛,在JDK1.8上,HashMap的源码又加入了新的内容,可见其重要。这次就是基于JDK1.
阅读全文
摘要:重量级锁 "synchronized关键字" 前文解释了synchronized的实现和运用,了解monitor的作用,但是由于monitor监视器锁的操作是基于操作系统的底层Mutex Lock实现的,对所要加锁线程加上互斥锁,但是加锁时间相比其他指令就长很多了,因此将这种基于互斥锁的加锁机制成为
阅读全文
摘要:实现原理 对于synchronized的基本了解就是作为锁来实现代码的同步,用法网上都有解释,下面也会写,但是这个底层是如何实现的,一直很想了解。 synchronized是多线程锁常用的方法,可以对方法或者代码块加锁,但在底层实现方式基本都是一样的,主要使用监视器锁monitor,这里我对一段加锁
阅读全文
摘要:一、基本概念 volatile作为Java虚拟机提供的最轻量级同步机制,用于保证共享变量在多线程的情况下各线程获取相同,不出现对该变量的操作和其他内存操作一样重排序。 重排序 在虚拟机上,由于内存操作速度远小于CPU的操作速度,为了减少CPU在等待内存操作过程的时间,虚拟机会按照一定规则打乱指令的执
阅读全文

浙公网安备 33010602011771号