pingh14

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2014年1月3日

摘要: 1,java中有几种方法可以实现一个线程?答:在Java中实现一个线程有两种方法,第一是实现Runnable接口实现它的run()方法,第二种是继承Thread类,覆盖它的run()方法。这两种方法的区别是,如果你的类已经继承了其它的类,那么你只能选择实现Runnable接口了,因为Java只允许单继承的。常见错误:调用run()方法而非start()方法创建并运行一个线程所犯的常见错误是调用线程的run()方法而非start()方法,如下所示:Thread newThread = new Thread(MyRunnable());newThread.run();起初你并不会感觉到有什么不妥, 阅读全文
posted @ 2014-01-03 00:14 pingh14 阅读(319) 评论(0) 推荐(0) 编辑

2014年1月2日

摘要: Semaphore:动态增减信号量,用于控制对某资源访问的同一时间的并发量。类似于令牌,谁拿到令牌(acquire)就可以去执行了,如果没有令牌则需要等待。【如何获取】:semaphore.tryAcquire(),尝试获取,不阻塞。semaphore.acquire(),没信号量可用时,将进行阻塞等,可以被中断。acquireUninterruptibly():获取信号量,将进行阻塞,但会忽略线程的中断而且不会抛出任何异常。【如何释放】:semaphore.release();线程抛出各种异常,都别忘了在finally中释放信号量;如果释放的比获取的信号量还多,例如获取了2个,释放了5次,那 阅读全文
posted @ 2014-01-02 22:27 pingh14 阅读(634) 评论(0) 推荐(0) 编辑

2013年12月24日

摘要: 这段代码大多数情况下运行正常,但是某些情况下会出问题。什么时候会出现什么问题?如何修正?public class MyStack { private List list = new ArrayList(); public synchronized void push(String value) { synchronized (this) { list.add(value); notify(); } } public synchronized String po... 阅读全文
posted @ 2013-12-24 01:24 pingh14 阅读(1080) 评论(0) 推荐(0) 编辑

摘要: d 阅读全文
posted @ 2013-12-24 00:40 pingh14 阅读(152) 评论(0) 推荐(0) 编辑

2013年12月20日

摘要: jstack(stack trace for java) 命令用于查看虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间的停顿原因。用Jstack分析死锁(以下代码将产生死锁)Java虚拟机死锁发生时,从操作系统上观察,虚拟机的CPU占用率为零,很快会从top或prstat的输出中消失。这时就可以收集thread dump了。在thread dump中查找"waiting for monitor entry"的thread,如果大量threa 阅读全文
posted @ 2013-12-20 01:27 pingh14 阅读(495) 评论(0) 推荐(0) 编辑

2013年12月19日

摘要: jmap:java内存映像工具jmap(Memory Map for java) 命令用于生成堆转储快照(一般被称为headdump 或dump文件)jmap命令格式:jmap [option ] vmid一: -heap 显示堆概要信息,包括垃圾回收器类型等。-histo 显示类的实例数量,大小等-permstat 永久代内存占用情况,其中包括intern strings和各种类型加载器加载的Class数据-dump:生成堆转储快照-finalizerinfo 阅读全文
posted @ 2013-12-19 01:04 pingh14 阅读(388) 评论(0) 推荐(0) 编辑

摘要: jstat:虚拟机统计信息见识工具jstat是用于见识虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。jstat option vmid [interval[s|ms] [count]]E表示Eden;s1,s1表示survivor0,survivor1;老年代o表示old,永久代p表示permanent程序运行以来供放生Minor GC(YGC,表示Yong GC)122次,总耗时0.392,发生Full GC(FGC,表示Full GC)6次,(FGCT)总耗时为0.666。不同的统计维度(statOption)及输出说明 阅读全文
posted @ 2013-12-19 01:00 pingh14 阅读(428) 评论(0) 推荐(0) 编辑

2013年12月18日

摘要: jps:虚拟机进程状况工具可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main class,class()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID。jps命令格式:jps [options] [hostid]jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。详解jps命令不带参数会打印出进程ID和主类名称,加参数"q"会省略主类名,如下图-q-m在eclipse的Run Configuration设置a b c 三个参数, 如下图使用jps -m可以打印出Main函数的三个参数-l (输出类全 阅读全文
posted @ 2013-12-18 01:28 pingh14 阅读(306) 评论(0) 推荐(0) 编辑

摘要: 如何判断堆中的哪些对象可以被回收主流的程序语言都是使用根搜索算法(GC Roots Tracing)判定对象是否存活基本思路是:通过一系列名为“GC Roots”的对象作为起点,从这些节点开始向下搜索,搜索超过的路径称为引用链(Reference chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。下图A的各个对象有引用链有GC Roots相连,说明对象都存活,而图B的三个对象虽然都各自相连,但却没有与任何一个GC Roots相连,则可判定它们为可回收的对象。在JAVA中,可作为GC Roots的对象包括下面几种:1,虚拟机栈(栈桢中的本地变量表)中引用的对 阅读全文
posted @ 2013-12-18 00:42 pingh14 阅读(320) 评论(0) 推荐(0) 编辑

2013年12月17日

摘要: 1,运行时数据区域根据JAVA虚拟机规范的规定:JAVA虚拟机所管理的内存将会包括以下几个运行时数据区域程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器,通过改变计数器的值来选取下一条需要执行的字节码指令、分支、循环、跳转、异常处理、线程恢复等基础功能。每条线程都需要一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存,也是唯一不会出现OutOfMemoryError情况的区域。JAVA虚拟机栈(Java Virtual Machine Stacks)也是线程 阅读全文
posted @ 2013-12-17 23:35 pingh14 阅读(260) 评论(0) 推荐(0) 编辑