Java Thread 那些事

  • 时间:
  • 浏览:3
  • 来源:uu快3IOS下载_uu快3app下载_和值

代码片段:

关于Thread stack,这里强调这名:nid,native lwp id,即本地轻量级多线程 (即多线程 )ID。

代码片段如下:

       ok,言归正传。上图:

Case 5: 模拟银行转帐存款

        这里重点关注一下LockSupport,该类是用来创建锁和这名同步类的基本多线程 阻塞原语,是一三个白针对Thread.suspend和Thread.resume()的优化,也是针对忙等,除理过度自旋的并与否优化(关于这名点,感兴趣的同学不能参阅一下文献5)。

多线程 的文章,发觉有太少太少的地方不能深挖,太少太少花点时间继续撰写,便有了这篇博文。

        每个 Monitor在某个时刻,不到被一三个白多线程 拥有,该多线程 太少太少 “Active Thread”,而其它多线程 前会 “Waiting Thread”,分别在一三个白队列 “Entry Set”和 “Wait Set”上端等待图片图片。在 “Entry Set”中等待图片的多线程 情形是 “Waiting for monitor entry”,而在 “Wait Set”中等待图片的多线程 情形是 “in Object.wait()”。将会你不恰当的使用了ReentrantLock将会ReentrantReadWriteLock类,前会 将会陷入BLOCKED情形,这名也是大伙儿儿调优中突然会遇到的情形,除理方案也很简单,找到等待图片上锁的地址,分析与否 趋于稳定了Thread starvation。

         至于TIME_WAITING情形,官方文档也讲解的比较好,即你在调用下面辦法 时,多线程 会进入该情形。

        这篇文章被压在草稿箱许久,最近公司内控 的技术社区有同学贴出了几篇分享

http://www.longene.org/forum/viewtopic.php?f=5&t=94&p=399#p399

   瞅瞅源代码中是为甚实现的,如下:

这里是一三个白非顺序加锁诱发的一三个白死锁场景。

Case 3: ActveMQ中针对MQTT协议的Handler

http://www.artima.com/insidejvm/ed2/threadsynch.html

       BLOCKED情形:多线程 进入此情形的前提一般有一三个白:waiting for monitor(intrinsic or external) entry 将会 reenter 同步代码块。讲到这大伙儿儿先了解一下Java多线程 模型中的一三个白队列。如图所示:

http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html

JavaConcurrency in practice

http://stackoverflow.com/questions/7698861/simple-java-example-runs-with-14-threads-why

参考文献:

http://architects.dzone.com/articles/how-analyze-java-thread-dumps

Case 2: NIO中的Selector

       Java的多线程 情形一共有NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED 6种情形。这里重点关注一下BLOCKED和TIMED_WAITING情形。

http://stackoverflow.com/questions/37026/java-notify-vs-notifyall-all-over-again

                                                    

       Case 1:NIO 中的Acceptor 

       1. waiting for monitor entry – thread state blocked。将会趋于稳定的现象: deadlock(sequential deadlock,starvation deadlock...)

       2. waiting on condition – sleeping or timed_waiting。将会趋于稳定的现象: IO bottleneck

       3. Object.wait – TIMED_WAITING。wait  & notifyAll使用上须要明确其性能及其局限性现象,JCIP上也推荐尽将会使用JUC提供的高级并发原语AQS

                                     

       好了,差太少了,总结一下在调优过程中须要重点关注的三类情形(grep java.lang.Thread.State dump.bin | awk '{print $2$3$4$5}' | sort | uniq -c):

http://www.slideshare.net/Byungwook/analysis-bottleneck-in-j2ee-application



        ok,在简单介绍完哪几个重点的多线程 情形后,大伙儿儿通过哪几个具体的case来了解下Thread stack