摘要: /** * Thread state for a thread blocked waiting for a monitor lock. * A thread in the blocked state is waiting for a monitor lock * to enter a synchro... 阅读全文
posted @ 2015-10-22 22:51 moonandstar08 阅读(1730) 评论(0) 推荐(0) 编辑
摘要: JavaThread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明:NEW 状态是指线程刚创建, 尚未启动RUNNABLE 状态是线程正在正常运行中, 当然可能会有某种耗时计算/IO等待的操作/CPU时间片切换等, 这个状态下发生的等待一般是其他系... 阅读全文
posted @ 2015-10-22 22:47 moonandstar08 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 一、简介 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用,负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。 Semaphore可以控制某个资源可被同时访问的个数,通过acquire() 获取一个许可,如果没有就等待;而 release() 释放一个许可。比如在Win... 阅读全文
posted @ 2015-10-22 22:38 moonandstar08 阅读(365) 评论(0) 推荐(0) 编辑
摘要: JVM GC是JVM的内存回收算法,调整JVM GC(Garbage Collection),可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,所以我们要了解JVM内存组成,回收算法,对象分配机制。 一、JVM堆内存组 阅读全文
posted @ 2015-10-22 22:22 moonandstar08 阅读(590) 评论(0) 推荐(0) 编辑
摘要: 一、jvisualvm使用 JDK1.6中Oracle提供了一个新的JVM监控工具:jvisualvm。下面重点介绍如何在本地通过远程的方式打开Linux服务器上的jvisualvm. 1、Xmanager安装 由于jvisualvm为可视化监控工具,在本地远程服务器时,为了保证能够打开jvisua... 阅读全文
posted @ 2015-10-22 22:05 moonandstar08 阅读(5049) 评论(0) 推荐(0) 编辑
摘要: Runnable是执行工作的独立任务,但是它不返回任何值,如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。一、Runnablejava... 阅读全文
posted @ 2015-10-21 22:37 moonandstar08 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 一、闭锁(Latch)闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态。通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都将通过,但是一旦大门打开,所有线程都通过了,那么这个闭锁的状态就失效了,门的状态也就不能变了,只能是打开状态... 阅读全文
posted @ 2015-10-21 21:50 moonandstar08 阅读(687) 评论(0) 推荐(0) 编辑
摘要: JAVA并发包提供三个常用的并发队列实现,分别是:ConcurrentLinkedQueue、LinkedBlockingQueue和ArrayBlockingQueue. ConcurrentLinkedQueue使用的是CAS原语无锁队列实现,是一个异步队列,入队速度很快,出队进行了加锁,性能稍 阅读全文
posted @ 2015-10-19 22:34 moonandstar08 阅读(2914) 评论(0) 推荐(0) 编辑
摘要: Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现... 阅读全文
posted @ 2015-10-19 21:47 moonandstar08 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 在项目中经常会碰到CPU占用率过高的问题,那么碰到这类问题应当如何处理呢?下面提供一种处理思路: 首先top -H -p <pid>以线程的模式查看java应用的运行情况,找到占用cpu或者内存大的线程,记录线程id,然后printf %x <tid>转为16进制,再jstack -l <pid> 阅读全文
posted @ 2015-10-19 21:24 moonandstar08 阅读(2076) 评论(0) 推荐(0) 编辑