08 2016 档案

摘要:在实际的开发过程中,我们一定会遇到服务自有的定时任务,又因为现在的服务都是分布式的,但是对于定时任务,很多的业务场景下,还是只希望单台服务来执行,网上有很多分布式定时任务的框架,各位如感兴趣,可以自行去研究。本文采用非常简单的方式实现了分布式的定时任务,利用了zookeeper的节点的EPHEMER 阅读全文
posted @ 2016-08-26 11:04 【刘光亮】 阅读(425) 评论(0) 推荐(0) 编辑
摘要:demo源码:https://github.com/mantuliu/javaAdvance 中的类Lesson4IndependentLock 在上一节中,我们分析了Lock的源代码并一起实践了粗粒度锁对于性能的影响,在本节中,我们将用锁机制来解决一个生产环境实际的案例。下面的案例是一个真实的案例 阅读全文
posted @ 2016-08-25 12:09 【刘光亮】 阅读(1257) 评论(0) 推荐(0) 编辑
摘要:写这篇文章源于我经历过的一次生产事故,在某家公司的时候,有个服务会收集业务系统的日志,此服务的开发人员在给业务系统的sdk中就因为使用了LinkedList,又没有做并发控制,就造成了此服务经常不能正常收集到业务系统的日志(丢日志以及日志上报的线程停止运行)。看一下add()方法的源码,我们就可以知 阅读全文
posted @ 2016-08-24 22:12 【刘光亮】 阅读(23641) 评论(4) 推荐(4) 编辑
摘要:关于这四种锁的各自情况,网上有很多文章做了介绍,本不想单独开章节介绍,本章只介绍这四种锁的一些源码特点及注意事项。 demo 源码:https://github.com/mantuliu/javaAdvance 首先来看公平锁和非公平锁,我们默认使用的锁是非公平锁,只有当我们显示设置为公平锁的情况下 阅读全文
posted @ 2016-08-23 16:54 【刘光亮】 阅读(1943) 评论(0) 推荐(0) 编辑
摘要:AtomicInteger等对象出现的目的主要是为了解决在多线程环境下变量计数的问题,例如常用的i++,i--操作,它们不是线程安全的,AtomicInteger引入后,就不必在进行i++和i--操作时,进行加锁操作,在我们日常工作中,有很多业务场景需要在多线程环境下进行变量的计数:订单数统计、访问 阅读全文
posted @ 2016-08-23 00:02 【刘光亮】 阅读(1592) 评论(0) 推荐(0) 编辑
摘要:在jdk1.5的版本中,java提供了语言级别的线程池,对于需要使用线程池的业务系统和中间件框架等提供了方便的选择。我认为线程池主要有两个方面的作用:第一就是防止因为外部条件的变化,造成线程数的瞬间飙升,从而影响了正常的业务使用;第二就是提高线程的利用率,从而在性能上带来好处,例如在NIO模型中,工 阅读全文
posted @ 2016-08-18 15:44 【刘光亮】 阅读(349) 评论(0) 推荐(0) 编辑
摘要:正常的情况下,业务系统都不会去中断它的线程,但是由于一些特殊情况的发生,线程已经不能正常结束了,并且此类线程已经影响到业务系统提供服务的能力,如果系统设计的健壮,便会通过监控线程去主动的中断此类线程。但是如果随意的去中断线程,又是非常危险的,因为线程内部会占用资源和改变变量的内容等,最好的办法是向线 阅读全文
posted @ 2016-08-17 20:04 【刘光亮】 阅读(246) 评论(0) 推荐(0) 编辑
摘要:Condition 将 Object 监视器方法(wait,notify,和notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Lock实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Conditio 阅读全文
posted @ 2016-08-16 18:57 【刘光亮】 阅读(1136) 评论(0) 推荐(0) 编辑
摘要:jdk1.5之前,我们对代码加锁(实际是对象加锁),都是采用Synchronized关键字来处理,jdk1.5及以后的版本中,并发编程大师Doug Lea在concurrrent包中提供了Lock机制。两种机制在性能上目前的jdk版本都差不多,Synchronized作为jvm的关键字,是在jvm层 阅读全文
posted @ 2016-08-15 14:51 【刘光亮】 阅读(774) 评论(0) 推荐(0) 编辑
摘要:本文向大家展示了java阻塞队列的使用场景、源码分析及特定场景下的使用方式。java的阻塞队列是jdk1.5之后在并发包中提供的一组队列,主要的使用场景是在需要使用生产者消费者模式时,用户不必再通过多线程自己实现,可以通过阻塞队列直接实现消息的分发和消费,方便简单,降低了开发难度,在本章的最后,我们 阅读全文
posted @ 2016-08-12 14:54 【刘光亮】 阅读(764) 评论(0) 推荐(0) 编辑
摘要:本文中所使用的demo源码地址:https://github.com/mantuliu/javaAdvance 其中的类Lesson1ThreadLocal 本文为java晋级系列的第一讲,后续会陆续推出java相关的高级应用和分析。我个人一直都比较推崇threadlocal的设计原理和实现方式。以 阅读全文
posted @ 2016-08-11 11:39 【刘光亮】 阅读(1910) 评论(0) 推荐(0) 编辑
摘要:由于jmeter不支持脚本的录制,只能手动设置,在某些集成型的压力测试时,使用不是很方便,这时可以和badboy一起配合使用,badboy支持网页操作的录制功能,并能把录制的操作导出为jmeter的脚本。本文的会在badboy中打开百度页面,并在页面中搜索【曼图 博客园】,最后再打开搜索的第一个页面 阅读全文
posted @ 2016-08-09 22:54 【刘光亮】 阅读(743) 评论(1) 推荐(0) 编辑
摘要:本文讲述了利用jmeter来压测消息队列,其中消息队列采用apache的activemq,jmeter本身是支持符合jms标准消息队列的压测,由于jmeter的官方sampler配置比较复杂,本文直接使用sdk的方式来压测,与生产实际使用更加接近,各位如对官方的sampler感兴趣,可以自行去配置完 阅读全文
posted @ 2016-08-09 21:43 【刘光亮】 阅读(6225) 评论(1) 推荐(0) 编辑
摘要:本文讲述了如何利用jmeter来压测数据库,事例中选取了mysql作为测试数据库,其它的数据库也是一样,只需要更换驱动程序即可。 准备工作:a.mysql数据库安装,请自行百度;b.jdbc驱动包,请在我的github上下载文件log4jdbc4-1.2beta2.jar 、mysql-connec 阅读全文
posted @ 2016-08-09 14:36 【刘光亮】 阅读(288) 评论(0) 推荐(0) 编辑
摘要:在我们的实际环境中,我们所使用的协议肯定不只是http的方式,对于rpc等调用协议,目前jmeter没有相应的sampler支持,这时就需要通过引入我们自己写的jar包的方式来解决这个问题。例如:当我们的服务方是采用netty+pb、thrift、dubbo等rpc方式时,本文采用thrift的方式 阅读全文
posted @ 2016-08-08 16:03 【刘光亮】 阅读(379) 评论(0) 推荐(0) 编辑
摘要:在实际进行压力测试的时候,经常会出现使用cookie传递值的情况,此时就需要使用【HTTP Cookie 管理器】来传递cookie值。 1.参照lession1中,创建线程组、sampler及聚合报告等; 2.创建【HTTP Cookie 管理器】,如图: 3.根据实际情况设置相应的cookies 阅读全文
posted @ 2016-08-04 15:59 【刘光亮】 阅读(391) 评论(0) 推荐(0) 编辑
摘要:本文展示了利用jmeter来压力测试普通网页,具体步骤如下: 1.添加【线程组】“lesson1压测普通网页”,“线程数”设置为10;“循环测试“设置为50,如图所示: 2.添加一个"http的sampler", 3.设置参数如下: 4.添加【聚合报告】和【查看结果树】后,点击【启动】按钮,【聚合报 阅读全文
posted @ 2016-08-03 16:18 【刘光亮】 阅读(267) 评论(0) 推荐(0) 编辑