首页
学习
活动
专区
工具
TVP
发布

JavaQ

专栏作者
165
文章
186653
阅读量
52
订阅数
高并发编程-happens-before
happens-before是Java内存模型中定义的两个操作之间的偏序关系,即如果操作A在操作B之前先发生,那么操作A产生的操作结果,操作B可以观察到,或者说操作A的结果影响到操作B。笔者认为Java内存模型中的这种与生俱来的原则实现了可见性和顺序性。
JavaQ
2018-12-13
4230
高并发编程-volatile详解
在介绍volatile之前,先简单了解一下Java内存模型。在Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽各个硬件平台和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果,笔者认为是定义了程序中变量的访问规则。
JavaQ
2018-12-07
6310
高并发编程-锁优化详解
Java在语言上支持了锁的特性,在很多常用类的实现中也使用了锁,对于Java开发者来说就可以很方便的使用这些锁及常用类。但是,随着锁的频繁使用及错用,随之而来的就是程序执行效率变低、应用变的缓慢。为了提高线程对共享数据访问的效率,HotSpot虚拟机从JDK1.5到JDK1.6做了重大改进,提供了很多锁优化技术,包括自旋锁、自适应自旋锁、锁消除、锁粗化、轻量级锁和偏向锁。
JavaQ
2018-12-06
4640
高并发编程-synchronized深入解析深挖
Java虚拟机的运行时数据区中的堆和方法区是所有线程共享的区域,如果多个线程需要同时使用共享的对象或类变量,则必须要正确协调它们对数据的访问。否则,程序将具有不可预测的行为。为了协调多个线程之间的共享数据访问,Java虚拟机将锁与每个对象或类关联起来。锁就像一种特权,在任何时候只有一个线程可以“拥有”它。如果一个线程想要锁定一个特定的对象或类,它会请求JVM,在线程向JVM请求锁之后(如果锁未被持有可能很快,如果锁被持有也可能稍后,也可能永远不会),JVM将锁提供给线程。当线程不再需要锁时,它将锁返回给JVM。
JavaQ
2018-11-23
3680
高并发编程-synchronized深入解析
对于单一JVM来说,synchronized可以保证在并发情况下,同一时刻只有一个线程执行某个方法或某段代码。synchronized可用于修饰普通方法、静态方法和代码块,都可以实现对同步代码的并发安全控制。
JavaQ
2018-10-23
4590
高并发编程-Condition深入解析
Condition接口位于java.util.concurrent.locks包下,实现类有 AbstractQueuedLongSynchronizer.ConditionObject和 AbstractQueuedSynchronizer.ConditionObject。Condition将Object监视器方法(wait、notify和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Lock实现组合使用。其中,Lock替代了synchronized方法的使用及作用,Condition替代了Object监视器方法的使用及作用。Condition的await方法代替Object的wait;Condition的signal方法代替Object的notify方法;Condition的signalAll方法代替Object的notifyAll方法。Condition实例在使用时需要绑定到一个锁上,可以通过newCondition方法获取Condition实例。Condition实现可以提供不同于Object监视器方法的行为和语义,比如受保证的通知排序,或者在执行通知时不需要保持一个锁。
JavaQ
2018-10-23
4850
高并发编程-ReentrantReadWriteLock深入解析
ReentrantLock在并发情况下只允许单个线程执行受保护的代码,而在大部分应用中都是读多写少,所以,如果使用ReentrantLock实现这种对共享数据的并发访问控制,将严重影响整体的性能。ReentrantReadWriteLock中提供的读取锁(ReadLock)可以实现并发访问下的多读,写入锁(WriteLock)可以实现每次只允许一个写操作。但是,在它的实现中,读、写是互斥的,即允许多读,但是不允许读写和写读同时发生。
JavaQ
2018-10-23
6880
高并发编程-ReentrantLock非公平锁深入解析
ReentrantLock是一个可重入的互斥锁,它不但具有synchronized实现的同步方法和同步代码块的基本行为和语义,而且具备很强的扩展性。ReentrantLock提供了公平锁和非公平锁两种实现,在默认情况下构造的ReentrantLock实例是非公平锁,可以在创建ReentrantLock实例的时候通过指定公平策略参数来指定是使用公平锁还是非公平锁。本篇将基于JDK7深入源码解析非公平锁的实现原理。
JavaQ
2018-10-23
4170
高并发编程-ReentrantLock公平锁深入解析
ReentrantLock是一个可重入的互斥锁,它不但具有synchronized实现的同步方法和同步代码块的基本行为和语义,而且具备很强的扩展性。ReentrantLock提供了公平锁和非公平锁两种实现,在默认情况下构造的ReentrantLock实例是非公平锁,可以在创建ReentrantLock实例的时候通过指定公平策略参数来指定是使用公平锁还是非公平锁。多线程竞争访问同一资源的时,公平锁倾向于将访问权授予等待时间最长的线程,但需要明确的是公平锁不能保证线程调度的公平性。和非公平锁相比,公平锁在多线程访问时总体吞吐量偏低,但是获得锁和保证锁分配的均衡性差异较小。本篇将基于JDK7深入源码解析公平锁的实现原理。
JavaQ
2018-09-14
9040
高并发编程-Semaphore深入解析
Semaphore是J.U.C包下的许可控制类,维护了一个许可集,通常用于限制可以访问某些资源(物理或逻辑的)的线程数目,或对资源访问的许可控制。
JavaQ
2018-09-14
7020
高并发编程-CAS深入解析
CAS(Compare and swap)直译过来就是比较和替换,是一种通过硬件实现并发安全的常用技术,底层通过利用CPU的CAS指令对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。仔细观察J.U.C包中类的实现代码,会发现这些类中大量使用到了CAS,所以CAS是Java并发包的实现基础。它的实现过程是,有3个操作数,内存值V,旧的预期值E,要修改的新值U,当且仅当预期值E和内存值V相同时,才将内存值V修改为U,否则什么都不做。
JavaQ
2018-08-15
2910
高并发编程-CountDownLatch深入解析
CountDownLatch允许一个或者多个线程一直等待,直到一组其它操作执行完成。在使用CountDownLatch时,需要指定一个整数值,此值是线程将要等待的操作数。当某个线程为了要执行这些操作而等待时,需要调用await方法。await方法让线程进入休眠状态直到所有等待的操作完成为止。当等待的某个操作执行完成,它使用countDown方法来减少CountDownLatch类的内部计数器。当内部计数器递减为0时,CountDownLatch会唤醒所有调用await方法而休眠的线程们。
JavaQ
2018-07-26
6960
深入理解Spring系列之十四:@Autowired是如何工作的
Spring框架的便利让我们很容易的使用@Autowired注解实现依赖注入,本篇将深入Spring源码解析@Autowired注解的工作原理。
JavaQ
2018-07-25
8220
HashMap扩容拾遗
JDK8中HashMap扩容涉及到的加载因子和链表转红黑树的知识点经常被作为面试问答题,本篇将对这两个知识点进行小结。
JavaQ
2018-07-25
3910
你需要知道的开源项目
Guava是Google的开源项目,它包含了Google工程师经常使用的内部核心库,例如集合、缓存、原语支持、并发库、通用注释、字符串处理、哈希、反射、I/O等,github:https://github.com/google/guava。
JavaQ
2018-07-25
5960
MySQL中如何选择VARCHAR和CHAR类型
首先,VARCHAR和CHAR是两种最主要的字符串类型。在设计用于存储字符串的表字段时,可能会对到底选哪个类型有所犹豫,确实如果不了解它们之间的区别,选择上不会那么容易,本篇将详细介绍它们之间的区别以
JavaQ
2018-04-08
1.8K0
再谈Vagrant
前言 两年前写过一篇关于Vagrant,最近因为环境需要重温了一下,所以又重新做了一次总结。 Vagrant是什么 Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。通过Vagrant可以轻松实现对虚拟机的管理,包括建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境各类软件、打包和分发虚拟机运行环境等,提供了一套基于配置文件和命令行的管理工具。 为什么要使用Vagrant Vagrant可以为团队开发成员提供一份服务器运行环境的虚拟机,大家都使用统一的开发环境,避
JavaQ
2018-04-08
9050
深入Spring Boot (四):YAML属性配置文件使用详解
Spring Boot弱化配置的特性让属性配置文件的使用也更加便捷,它默认支持对application.properties或application.yml属性配置文件处理,即在application.properties或application.yml文件中添加属性配置,可以使用@Value注解将属性值注入到beans中,或使用@ConfigurationProperties注解将属性值绑定到结构化的beans中,本篇将详细介绍YAML属性配置文件的使用。 本篇主要包含以下6部分内容: YAML是什么 ;
JavaQ
2018-04-08
2.7K0
深入Spring Boot (三):Properties属性配置文件使用详解
2018年3月1日Spring官网正式对外发布了Spring Boot2.0正式版,新版本新增了很多新特性,使用上会更加便捷,所以《深入Spring Boot》系列文章将会以2.0正式版作为基础。 Spring Boot弱化配置的特性让属性配置文件的使用也更加便捷,它默认支持对application.properties或application.yml属性配置文件处理,即在application.properties或application.yml文件中添加属性配置,可以使用@Value注解将属性值注入到b
JavaQ
2018-04-08
7K0
记一次java.lang.NoSuchMethodError
当思路如泉涌般、很流程的写完一段代码,点击Run看看执行结果的时候,Duang的一下输出了一串“Caused by: java.lang.NoSuchMethodError: xxx/xxx/xxx”,瞬间美好的心情就没了。 左看看又看看,有这个方法! 打开Google根据关键字探索,搜出的结果是jar冲突了,而冲突的jar的类中没有这个方法,导致找不到这个方法。网上有很多各路大神的解决办法,有用开源工具检查的,有输出依赖树结构查找的,用起来都不是很顺手。 总结了一个简单有效的方法,在IDEA中,将报错方法
JavaQ
2018-04-08
1.4K0
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档