摘要:
最近博主在看redis的时候发现了两种redis使用方式,与之前redis作为缓存不同,利用的是redis可设置key的有效时间和redis的BRPOP命令。 分布式锁 由于目前一些编程语言,如PHP等,不能在内存中使用锁,或者如Java这样的,需要一下更为简单的锁校验的时候,redis分布式锁的使 阅读全文
摘要:
最近看多线程的时候发现对于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在等待内存操作过程的时间,虚拟机会按照一定规则打乱指令的执 阅读全文