【連載】第1章-1.4線程無處不在

格言:在程序猿界混出點(diǎn)名堂!

《JAVA并發(fā)編程實(shí)戰(zhàn)》解讀
【連載】第1章-1.4線程無處不在

回顧:在1.3中介紹了,線程帶來的風(fēng)險(xiǎn),包括安全性問題、活躍性問題還有性能問題,這一小節(jié)講的是線程無處不在。

每個(gè)JAVA應(yīng)用程序都會(huì)使用線程。

當(dāng)JVM啟動(dòng)后,為JVM內(nèi)部任務(wù)(比如垃圾回收器)創(chuàng)建后臺(tái)線程,并創(chuàng)建一個(gè)主線程來運(yùn)行main方法??梢允褂胘stack的監(jiān)控工具打印堆棧日志查看,我只寫了一個(gè)main方法啟動(dòng),可以看到有很多的JVM線程。

"main" #1 prio=5 os_prio=31 tid=0x00007f9f3c801800 nid=0x2803 waiting on condition [0x000070000d152000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at cn.kazz.RunOneTask.main(RunOneTask.java:8)

"VM Thread" os_prio=31 tid=0x00007f9f3c83e800 nid=0x5103 runnable 

"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007f9f3c800800 nid=0x2007 runnable 

"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007f9f3c81d000 nid=0x2103 runnable 

"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007f9f3c81d800 nid=0x5403 runnable 

"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007f9f3c81e000 nid=0x2b03 runnable 

"VM Periodic Task Thread" os_prio=31 tid=0x00007f9f3b00a000 nid=0x3a03 waiting on condition 

多數(shù)Java應(yīng)用程序都是多線程

多少Java應(yīng)用程序都是多線程,使用時(shí)需要對(duì)應(yīng)用程序的狀態(tài)(比如內(nèi)存變量)的訪問進(jìn)行協(xié)同。
而且一些框架引入了并發(fā)性時(shí),通常并發(fā)性不僅局限于框架代碼。比如下面提到的這些。

  • Timer
    Java的工具,作用是在稍后的片刻運(yùn)行,或者運(yùn)行一次或者周期性運(yùn)行。
    帶來的問題是周期性運(yùn)行可能改變其他線程訪問的共享數(shù)據(jù)。也就是說Timer本身就是一個(gè)線程,可能存在不安全的操作,最簡單的方式解決這種不安全就是把線程安全封裝在共享對(duì)象內(nèi)部。AtomicInteger就是很好的安全封裝的例子。

  • Servlet和JSP
    Servlet框架屬于Web應(yīng)用程序。有可能同一個(gè)Servlet服務(wù)同時(shí)被多個(gè)客戶端調(diào)用,也就是多線程調(diào)用,因此也需要注意線程安全的問題。

  • 遠(yuǎn)程方法調(diào)用
    就是RMI,跟Dubbo、Thrift等框架類似,這些框架跟Servlet一樣,也可以被多個(gè)客戶端調(diào)用,存在訪問共享變量的安全性問題,對(duì)共享變量也要協(xié)同共享對(duì)象的狀態(tài)。

知識(shí)點(diǎn)

  1. 了解這些多線程的框架來體會(huì)多線程可能帶來的非安全性問題。

喜歡連載可關(guān)注簡書或者微信公眾號(hào)
簡書專題:Java并發(fā)編程實(shí)戰(zhàn)-可愛豬豬解讀
http://www.itdecent.cn/c/ac717321a386
微信公眾號(hào):逗哥聊IT

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自陳明乾的博客,可能有一定更新。 轉(zhuǎn)原文聲明:原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章 原始出處 、...
    C86guli閱讀 4,883評(píng)論 6 72
  • JAVA面試題 1、作用域public,private,protected,以及不寫時(shí)的區(qū)別答:區(qū)別如下:作用域 ...
    JA尐白閱讀 1,269評(píng)論 1 0
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,012評(píng)論 0 11
  • JAVA相關(guān)基礎(chǔ)知識(shí) 1、面向?qū)ο蟮奶卣饔心男┓矫?1.抽象: 抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以...
    yangkg閱讀 756評(píng)論 0 1
  • 下面是利用原子讀寫操作的兩種算法 在下面的算法中對(duì)數(shù)據(jù)的讀寫都是原子的 算法一兩段程序如下:(1) (2) 這個(gè)解...
    Fruit_初閱讀 400評(píng)論 0 0

友情鏈接更多精彩內(nèi)容