Skip to content

Instantly share code, notes, and snippets.

View huowa222's full-sized avatar
💭
Just leave me alone!

Howard huowa222

💭
Just leave me alone!
  • Self employed
  • Beijing
View GitHub Profile
@huowa222
huowa222 / gist:9569687
Created March 15, 2014 16:09
Java lock lock vs synchronizer
JVM底层又是如何实现synchronized的?
目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。
数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能会进一步追问:JVM底层又是如何实现synchronized的?
本文所指说的JVM是指Hotspot的6u23版本,下面首先介绍synchronized的实现:
synrhronized关键字简洁、清晰、语义明确,因此即使有了Lock接口,使用的还是非常广泛。其应用层的语义是可以把任何一个非null对象 作为"锁",当synchronized作用在方法上时,锁住的便是对象实例(this);当作用在静态方法时锁住的便是对象对应的Class实例,因为 Class数据存在于永久带,因此静态方法锁相当于该类的一个全局锁;当synchronized作用于某一个对象实例时,锁住的便是对应的代码块。在 HotSpot JVM实现中,锁有个专门的名字:对象监视器。
1. 线程状态及状态转换
当多个线程同时请求某个对象监视器时,对象监视器会设置几种状态用来区分请求的线程:
@huowa222
huowa222 / gist:9569075
Created March 15, 2014 15:33
J.U.C framework
J.U.C并发框架(1)
翻译:书卷多情
在J2SE1.5中,java.util.concurrent包下的大部分同步工具(锁、阻塞等)以AbstractQueuedSynchronizer类为基础来构建。这个框架提供了一些常用机制用于自动管理并发状态、阻塞及非阻塞线程和队列。本论文描述了该框架的根源、设计实现、用法及性能。
关键字:synchronized, java
1、介绍
@huowa222
huowa222 / hello world
Last active May 30, 2016 16:08
hello , my first gist code
public class sexIdentifier {
public static final String HOMOSEXUAL = "homo";
public static final String STRAIGHT = "straight";
public static void main(String args[]){
public String identifyGender(String yourGender, String belovedGender){
if(yourGender.equals(belovedGender)){
return HOMOSEXUAL;
}else{