自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

熊猫猫

恋恋不忘 必有回响

  • 博客(164)
  • 资源 (5)
  • 收藏
  • 关注

翻译 无锁和无等待并发

原文参考:http://rethinkdb.com/blog/lock-free-vs-wait-free-concurrency/,之前看ConcurrentLinkedQueue看到wait-free的东西,百度看到这篇文章,文章比较短,翻译下练手。有2种类型的非阻塞线程同步算法:无锁和无等待,他们的含义经常被混淆。在无锁系统中,当任何一个特定的计算可能被阻塞一段时间的时候,所有其他的cp

2016-08-02 21:46:46 1085

原创 JUC源码分析23-队列-ConcurrentLinkedQueue

之前看的队列大都是基于锁来实现阻塞,ConcurrentLinkedQueue采用wait-free算法来实现'无锁'的并发队列。wait-free算法之前没听说过,只听过lock-free,大牛解析说2中不同,具体看参考,有空后面翻译下。ConcurrentLinkedQueue基于单向链表实现线程安全的无界队列。队列元素遵循FIFO。看下队列内部结构:/*** Node节点,一个

2016-08-01 17:38:32 706

转载 编译JDK源代码,开启Debug信息

看JUC源码的时候,想debug查看一些本地变量,不行,然后百度之,找到一个方法,仅此记录!百分百可以!用Eclipse Debug,当跟踪进jdk api里时(比如javax.swing包里的类),无法查看某些local filed的值。这是因为jdk里的代码在打包时删除了一些用于调试的信息,以减小安装包的体积。不过可以通过重新编译jdk源代码来恢复此功能。1.在Eclips

2016-07-29 11:39:22 1226

原创 JUC源码分析22-队列-SynchronousQueue

SynchronousQueue是一种比较特殊的阻塞队列,不同于之前的阻塞队列,特点为:1.每次put必须有take的存在,也就是说生产者将一个元素put传递给一个消费者,消费者不存在就put不成功;2.内部没有容量来维持存放元素,所以size,迭代等一些方法没有意义;3.使用cas操作,没有使用锁;4.通过栈(非公平),队(列公平)2中结构来支持公平\非公平策略。newC

2016-07-26 17:06:44 734

原创 Eclipse 控制台中文乱码

一个坑跳了2次,记录下,eclipse中文在控制台打印乱码。run->run configurations->commons->GBK:

2016-07-21 17:29:03 500 1

原创 JUC源码分析21-队列-LinkedBlockingDeque

LinkedBlockingDeque基于双向链表实现的阻塞队列,根据构造传入的容量大小决定有界还是无界,默认不传的话,大小Integer.Max。实现BlockingDequeue接口,这个接口继承BlockingQueue和Dequeue,看下接口方法:public interface BlockingDeque extends BlockingQueue, Deque { /**

2016-07-12 15:51:24 1040

原创 JUC源码分析20-队列-DelayQueue

画个JUC阻塞队列的类关系图,之前都没在意,画一下感觉会清楚很多DelayQueue是无界的阻塞队列,其特点是实现队列元素的延迟出队,通俗点说就是队列元素可以设置延迟时间,时间不到,就待在队列中,很有意思的东西,感觉跟redis设置过期时间一样。队列元素不容许添加null元素。DelayQueue可以用来实现调度的定时任务或者缓存的过期。添加的队列元素必须实现Delayed接口:

2016-07-11 18:03:04 906

原创 JUC源码分析19-队列-PriorityBlockingQueue

PriorityBlockingQueue是一个基于数组实现的线程安全的无界队列,原理和内部结构跟PriorityQueue基本一样,只是多了个线程安全。javadoc里面提到一句,1:理论上是无界的,所以添加元素可能导致outofmemoryerror;2.不容许添加null;3.添加的元素使用构造时候传入Comparator排序,要不然就使用元素的自然排序。PriorityBlocking

2016-07-08 18:49:02 2099

原创 JUC源码分析18-队列-LinkedBlockingQueue

LinkedBlockingQueue是基于单向链表实现的有界阻塞队列,队列元素遵循FIFO,LinkedBlockingQueue比基于数组的阻塞队列拥有更好的吞吐量,但是在大部分并发应用中,性能不如基于数组的队列。和ArrayBlocingQueue一样继承AbstractQueue,实现BlockingQueue接口,不再看BlockingQueue接口代码,直接看LinkedBlock

2016-07-06 18:05:38 597

原创 JUC源码分析17-队列-ArrayBlockingQueue

看ArrayBlockingQueue的javadoc说明,简单翻译过来:1.基于数组实现的有界阻塞队列,队列采用FIFO;2.因为基于数组,所以队列创建后大小不能改变。线程在插入元素到一个满的队列时会阻塞,线程获取元素时,队列为空也会阻塞;3.对于队列的生产和消费线程提供了公平非公平策略。ArrayBlockingQueue继承AbstractQueue抽象类,实现了Blocki

2016-07-06 14:33:05 425

原创 JUC源码分析16-集合-ConcurrentSkipListMap、ConcurrentSkipListSet

NBA这赛季结束,勇士可惜啊,谁能想到没拿到冠军,库昊也没成为真正的老大,lbl一战封神,所有口水留言都变成羡慕嫉妒恨,哎,我库啊,还是还是看书吧。ConcurrentSkipListMap说实话,之前还真没注意过,还是看JUC才看到,利用skiplist跳表结构来实现一种有序的map,之前看到的map都是无序。在学习前还是要好好了解下什么是skiplist跳表,的确很不错,利用空间换时间,复

2016-06-23 10:12:34 3781

原创 linux 命令

一些常用命令老是忘记,百度记录下,随时添加,谢谢原创-----------------------------------------------------假如,你想在当前目录下的所有普通文件中搜索查找包含:liehuo.net 这个词的文件,那么命令如下:   1.# find . -name \* -type f -print | xargs grep “liehuo.n

2016-06-18 12:06:17 389

转载 MySQL索引背后的数据结构及算法原理

看到一篇好文章,还不错,转载学习下:http://blog.jobbole.com/24006/。摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为

2016-06-14 11:19:26 577

原创 java类加载说明

明天端午,下午回家,我的JUC也一时半会看不完,就随手看看阿里中间件博客http://jm.taobao.org上的文章,看到spi的东西,就想想好像java类加载进制不是特别清楚,虽说知道有3层,什么双亲委托,但是还是有点模糊,哎,赶紧学习吧,这里写下来,省的以后忘记。千言万语不如一行代码,先看代码:public class Hello { public static

2016-06-08 15:51:13 396

原创 JUC源码分析15-集合-ConcurrentHashMap

好几天没看juc了,之前看了HashMap,还有个差不多的HashTable,二者的结构大致相同,小小的比较下2者的不同:1.HashMap是非线程安全的,HashTable通过synchronized加锁实现线程安全。如果我们的代码里存在{get();...;put()}这种操作的话就保证不了;2.HashMap可以存储key或value为null的值,HashTable不行;3.初

2016-06-06 20:04:23 1883

转载 java关键字-final语义

转载:http://www.infoq.com/cn/articles/java-memory-model-6/ 对java关键字final的解析,以前都没关注过final竟然这些东西。与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个final域的写入,与随后把这个被

2016-05-24 17:09:39 1815

原创 JUC源码分析14-集合-HashMap

在学习juc并发集合前先看了下HashMap,听说好多面试会问这个,没遇见过,学习下吧。学习的jdk源码一直都是1.7版本的,其他版本可能有些微不同,应该也不影响学习。HashMap有几点需要记得吧:1.是非线程安全的:javadoc说明:可以通过Map m = Collections.synchronizedMap(new HashMap(...));解决,或者干脆用juc里面Concu

2016-05-20 12:04:17 4081

原创 JUC源码分析13-locks-ReentrantReadWriteLock

ReentrantReadWriteLock基于AQS实现读写锁的同步:1.利用共享模式实现读锁,独占模式实现写锁;2.支持公平和非公平,非公平的情况下可能会出现读锁阻塞写锁的场景;3.写锁阻塞写锁和读锁,读锁阻塞写锁;4.写锁可以降级为读锁,读锁不能升级为写锁,只能先release再lock;5.写锁支持condition条件;6.读写锁都支持超时/中断lock;

2016-05-18 11:23:40 2985

原创 JUC源码分析12-locks-CyclicBarrier

CyclicBarrier字面意思是可循环栅栏,看javadoc的帮助A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point. CyclicBarriers are useful in programs involving a fi

2016-05-13 09:53:18 434

原创 JUC源码分析11-locks-Semaphore

Semaphore不明白为什么直接放在juc包下,不是应该放locks下面嘛,这里还是当初locks学习吧。Semaphore英文是信号量的意思,在这里我喜欢叫资源或者许可,实现的功能就是获取资源,获取到就干活,获取不到就排队,等别人释放了资源,然后所有排队的再去获取。实现AQS的共享api,看个入门demo:public class SemaphoreTest { //3个

2016-05-11 17:37:24 521

原创 JUC源码分析10-locks-CountDownLatch

上一次学习了ReetrantLock,是对AQS独占模式的,这次学习CountDownLatch,是共享模式api的实现。人生不死,学无止境。先看个demo吧:import java.util.concurrent.CountDownLatch;public class CountDownLatchTest { private static CountDownLatch

2016-05-11 09:55:24 811

原创 JUC源码分析9-locks-ReentrantLock

ReentrantLock可重入锁,使用比synchronized方便灵活,可作为替代使用:1.支持公平/不公平锁;2.支持响应超时,响应中断;3.支持condition;ReentrantLock实现了Lock接口,内部使用static类继承AQS实现独占式的api来实现这些功能,使用AQS的state来表示锁可重入次数:之前学习AQS的时候说过请求和rele

2016-05-10 16:14:24 1077

原创 JUC源码分析8-locks-AQS-condition

AQS的conditionObject实现类似object的wait/notify/notify的功能,功能大概是:1.object维护一个监视器和一个等待队列,condition对于一个lock可以有多个condition,对于每个condition维护一个条件队列;2.提供wait/signal/signalall功能。来个入门demo:public class Conditi

2016-05-10 11:57:54 1521 1

原创 JUC源码分析7-locks-AQS-共享模式

AQS中一定要记住2点:1.处理流程:if(!请求成功)加入队列2.请求是对state的判断,AQS不关心你state表示什么,你可以表示状态也可以表示数量,由子类实现对请求的判断。将规则的判断和规则的处理分离,有点像模板模式。先想想什么是独占什么是共享,举个栗子:独占就像大家拿号去排队体检,你拿号了发现前面还有n个人,没办法,等吧,然后你前面的人体检完了,医生就说,你通知下一

2016-05-06 17:42:17 1999 1

原创 JUC源码分析6-locks-AQS-独占模式

AbstractQueuedSynchronizer(下面简称AQS),javadoc说明: Provides a framework for implementing blocking locks and related synchronizers (semaphores, events, etc) that rely on  first-in-first-out (FIFO) wait que

2016-05-06 14:05:26 1301

原创 JUC源码分析5-locks-LockSupport

LockSupport通过unsafe提供阻塞和唤醒线程的方法,AQS和其他的lock都会使用到这个基础类。private LockSupport() {} // Cannot be instantiated.private static final Unsafe unsafe = Unsafe.getUnsafe();private static final long parkBl

2016-05-04 11:58:53 753

原创 JUC源码分析4-原子变量-AtomicStampedReference/AtomicMarkableReference

之前讲过的AtomicInteger等CAS操作会产生ABA问题,什么是ABA?wiki官方解释https://en.wikipedia.org/wiki/ABA_problem,简单讲就是多线程环境,2次读写中一个线程修改A->B,然后又B->A,另一个线程看到的值未改变,又继续修改成自己的期望值。如果我们不关心中间状态的变化,只关心最终结果,就无所谓ABA问题。看代码:import jav

2016-05-04 10:12:11 1634

原创 JUC源码分析3-原子变量-AtomicIntegerFieldUpdater/AtomicLongFieldUpdater/AtomicReferenceFieldUpdater

如果我们系统中已经有某个类的变量定义为volatile了,现在为了保证对这个变量的原子性操作,就可以尝试使用这几个类,举个栗子:import sun.reflect.Reflection;public class AtomicFieldIncr { //这里最好是public volatile,不要加final、static //修饰符最好也不要为protected,pr

2016-04-29 17:09:59 1675

原创 JUC源码分析2-原子变量-AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray

JUC针对数组元素的原子封装,先看AtomicIntegerArray。private static final Unsafe unsafe = Unsafe.getUnsafe();//arrayBaseOffset获取数组首个元素地址偏移private static final int base = unsafe.arrayBaseOffset(int[].class);//shif

2016-04-29 11:57:17 1007 1

原创 JUC源码分析1-原子变量-AtomicInteger/AtomicBoolean/AtomicLong/AtomicReference

记录学习中的一些东西,防止以后遗忘,参考了很多别人的文章,感谢之!多线程并发操作时,对普通变量++或--不具有原子性,每次读取的值都不一样,看代码:import java.util.concurrent.atomic.AtomicInteger;public class Incr { public AtomicInteger a = new AtomicInteger

2016-04-28 19:43:25 1395

原创 Protostuff序列化

这几天在看rpc框架的东西,一哥们写的轻量级rpc框架(http://my.oschina.net/huangyong/blog/361751?fromerr=NpC3phqY)实现,写的rpc很不错,就跟着撸了遍代码,里面用到的序列化工具是protostuff,之前我们项目供应商接口用的xml,没用过protostuff,拿过来研究下,写个demo示例,以后再需要的话,也可以拿过来用。常用的

2016-04-15 14:37:16 3119

转载 Java并发编程:线程池的使用

转自:http://www.cnblogs.com/dolphin0520/p/3932921.html ,线程池的使用,哎,苦逼的coder,学无止境awaitTermination():用于等待子线程结束,再继续执行下面的代码Java并发编程:线程池的使用  在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:  如

2016-04-06 16:23:29 476

原创 spring的bean获取项目根目录

昨天碰见个问题,maven打包多模块的web项目。将spring的bean配置在远程调度系统,调度系统通过发送调度命令到本地,本地通过线程池调用spring的bean。在service模块打包的jar中,我需要保存一些文件到本地,因为不是通过web调用,所以获取不到项目根目录,当时也没想到有什么好办法。所以就直接保存到系统目录,代码做预判,目录不存在就新建,在window下,创建目录都没有问题,但

2016-04-06 10:20:14 3087

转载 ConcurrentHashMap、synchronized与线程安全

转自:http://blog.csdn.net/sadfishsc/article/details/42394955最近做的项目中遇到一个问题:明明用了ConcurrentHashMap,可是始终线程不安全除去项目中的业务逻辑,简化后的代码如下:[java] view plain copypublic class Test

2016-04-05 19:57:41 558

转载 Timing wheel

本来在看netty5的源码,后来里面使用timewheel实现定时任务,就了解下是什么玩意,转载3篇文章:http://www.cppblog.com/Solstice/archive/2011/05/04/145691.html这篇理论讲的不错,c++的实现http://blog.csdn.net/mindfloating/article/details/8033340 java实现

2016-03-29 14:30:51 1519

转载 jQuery插件开发

以前看到的一篇文章,不错http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统。这好比大公司们争相做平台一样,得平台者得天下。苹果,微软,谷歌等巨头,都有各自的平台及生态圈。学会使用jQuery并不难

2016-03-22 15:12:20 489

原创 java注解的Inherited

在学习netty5.0源码时,发现没有了之前的in-outbound的概念,而是通过AdapterAbstractChannelHandlerContext中skipFlags来区分的。skipFlags又是通过解析channelhandler类中方法的skip注解来获的。后来就研究了下java注解的继承关系,发现有没有Inherited元注解,加在类还是方法上还是有些区分的。看下元注解I

2016-03-18 11:29:51 1303

转载 java位操作符

用在哪里:1.状态标识:n多状态需要区分,当然可以直接用枚举0、1、2这样子标识,但是用12.标识选择项:前台界面n多下拉框选择项,最后你可以用一个位操作全部放在一个字段标识。以下转自:http://www.blogjava.net/zhaomingchao/articles/298318.html二进制负数以它正值的补码形式表达补码:反码+1等于补码比如:

2016-03-08 10:54:05 398

转载 一分钟掌握Spring中bean的生命周期

转自:http://itlab.idcquan.com/Java/configure/850745.html ,写的挺好的,我就不写了 Spring 中bean 的生命周期短暂吗?    在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用S

2016-02-29 16:15:57 1308

转载 Mysql中的MVCC

转自:http://blog.csdn.net/chen77716/article/details/6742128 ,mvcc跟以前理解的不一样,转载学习Mysql到底是怎么实现MVCC的?这个问题无数人都在问,但google中并无答案,本文尝试从Mysql源码中寻找答案。  在Mysql中MVCC是在Innodb存储引擎中得到支持的,Innodb为每行记录都实现了三个

2016-02-29 10:30:38 341

springboot2.X+maven+mybatis+shiro+redis

之前看的一哥们的springboot整合shiro的demo,springboot是1.X,自己改成了2.X,其他基本相同,部署请看https://blog.csdn.net/xiaoxufox/article/details/88965235

2019-04-02

javaConcurrentAnimated

动画演示java并发库的API javaConcurrentAnimated

2015-12-11

一致性hashjava实现

别人写的一个一致性hash的java实现,分享下

2015-12-10

ActiveObject

多线程设计模式-activeObject代码

2015-12-07

mybase管理

myBaseDesktop6破解版可以用来做知识库管理,力挺

2013-01-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除