java 进程描述_java 进程和线程
什么是進程,什么是線程?
進程:是并發(fā)執(zhí)行的程序在執(zhí)行過程中分配和管理資源的基本單位,是一個動態(tài)概念,競爭計算機系統(tǒng)資源的基本單位。
線程:是進程的一個執(zhí)行單元,是進程內(nèi)科調(diào)度實體。比進程更小的獨立運行的基本單位。線程也被稱為輕量級進程。
一個程序至少一個進程,一個進程至少一個線程。
進程線程的區(qū)別:
1、地址空間:同一進程的線程共享本進程的地址空間,而進程之間則是獨立的地址空間。
2、資源擁有:同一進程內(nèi)的線程共享本進程的資源,但是進程之間的資源是獨立的。
3、一個進程崩潰后,在保護模式下不會對其他進程產(chǎn)生影響,但是一個線程崩潰整個進程都死掉。所以多進程要比多線程健壯。
4、進程切換時,消耗的資源大,效率高。所以涉及到頻繁的切換時,使用線程要好于進程。同樣如果要求同時進行并且又要共享某些變量的并發(fā)操作,只能用線程不能用進程。
5、執(zhí)行過程:每個獨立的進程程有一個程序運行的入口、順序執(zhí)行序列和程序入口。但是線程不能獨立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制。
6、線程是處理器調(diào)度的基本單位,但是進程不是。
7、兩者均可并發(fā)執(zhí)行。
優(yōu)缺點:
線程執(zhí)行開銷小,但是不利于資源的管理和保護。線程適合在SMP機器(雙CPU系統(tǒng))上運行。
進程執(zhí)行開銷大,但是能夠很好的進行資源管理和保護。進程可以跨機器前移。
什么地方會用到多線程?
1、后臺線程:比如定期執(zhí)行一些特殊任務(wù),如定期更新配置文件,任務(wù)調(diào)度,一些監(jiān)控用于定期信息采集等。
2、最典型的應(yīng)用比如tomcat,tomcat內(nèi)部采用的就是多線程,上百個客戶端訪問同一個web應(yīng)用,tomcat接入后都是把后續(xù)的處理扔給一個新的線程來處理,這個新的線程最后調(diào)用到我們的servlet程序,比如doGet或者doPost方法。還有就是需要異步處理的時候,需要使用多線程。
3、特別耗時的操作,如備份數(shù)據(jù)庫,可以開個線程執(zhí)行備份,然后執(zhí)行返回,前臺不斷向后臺詢問線程執(zhí)行狀態(tài)。
多線程有幾種實現(xiàn)方法?有什么區(qū)別?
實現(xiàn)多線程有兩種方式:(自JDK1.5之后有三種,最后一種并不常用)
1.繼承Thread類
2.實現(xiàn)Runnable接口(Callable接口)
一個類如果實現(xiàn)了Runnable接口或者繼承了Thread類,那么它就是一個多線程類,如果是要實現(xiàn)多線程,還需要重寫run()方法,所以run() 方法是多線程的入口。
多線程的兩種實現(xiàn)方式的區(qū)別:
1.Thread是Runnable接口的子類,實現(xiàn)Runnable接口的方式解決了Java單繼承的局限
2.Runnable接口實現(xiàn)多線程比繼承Thread類更加能描述數(shù)據(jù)共享的概念
多線程有幾種實現(xiàn)同步方法?
同步的實現(xiàn)方面有兩種,分別是synchronized,wait與notify
wait():使一個線程處于等待狀態(tài),并且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處于睡眠狀態(tài),是一個靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。
notify():喚醒一個處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時候,并不能確切的喚醒某一個等待狀態(tài)的線程,而是由JVM確定喚醒哪個線程,而且不是按優(yōu)先級。
Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
產(chǎn)生死鎖的原因?
產(chǎn)生死鎖的四個必要條件:
1、互斥條件:一個資源每次只能被一個進程使用。
2、請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
3、不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
4、循環(huán)等待條件:若干進程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。
避免死鎖
上面列出了死鎖的四個必要條件,我們只要想辦法破其中的任意一個或多個條件,就可以避免死鎖發(fā)生,一般有以下幾種方法:
1、按同一順序訪問對象。
2、避免事務(wù)中的用戶交互。
3、保持事務(wù)簡短并處于一個批處理中。
4、使用較低的隔離級別。
5、使用基于行版本控制的隔離級別。
6、使用綁定連接。
以上就是有關(guān)進程和線程的總結(jié),有什么好的意見歡迎大家留言。
總結(jié)
以上是生活随笔為你收集整理的java 进程描述_java 进程和线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fiddler自动保存mysql_Fid
- 下一篇: java 素数 五行_【数论】素数的判定