什么是死鎖取胎?
線程死鎖是指由于兩個或者多個線程互相持有對方所需要的資源,導(dǎo)致這
些線程處于等待狀態(tài)匪蟀,無法前往執(zhí)行椎麦。當(dāng)線程進(jìn)入對象的synchronized代
碼塊時,便占有了資源萄窜,直到它退出該代碼塊或者調(diào)用wait方法铃剔,才釋放
資源,在此期間查刻,其他線程將不能進(jìn)入該代碼塊键兜。當(dāng)線程互相持有對方所
需要的資源時,會互相等待對方釋放資源穗泵,如果線程都不主動釋放所占有
的資源普气,將產(chǎn)生死鎖。
死鎖產(chǎn)生的原因是什么佃延?
1. 系統(tǒng)資源的競爭
系統(tǒng)資源的競爭導(dǎo)致系統(tǒng)資源不足现诀,以及資源分配不當(dāng),導(dǎo)致死鎖履肃。
2. 進(jìn)程運行推進(jìn)順序不合適
進(jìn)程在運行過程中仔沿,請求和釋放資源的順序不當(dāng),會導(dǎo)致死鎖
什么是進(jìn)程和線程尺棋?進(jìn)程和線程的區(qū)別封锉?
進(jìn)程:是并發(fā)執(zhí)行的程序在執(zhí)行過程中分配和管理資源的基本單位,是一個動態(tài)概念膘螟,競爭計算機系統(tǒng)資源的基本單位成福。
線程:是進(jìn)程的一個執(zhí)行單元,是進(jìn)程中執(zhí)行運算的最小單位荆残。線程也被稱為輕量級進(jìn)程奴艾。
區(qū)別?
地址空間:同一進(jìn)程的線程共享本進(jìn)程的地址空間内斯,而進(jìn)程之間則是獨立的地址空間蕴潦。
資源擁有:同一進(jìn)程內(nèi)的線程共享本進(jìn)程的資源如內(nèi)存像啼、I/O、cpu等品擎,但是進(jìn)程之間的資源是獨立的埋合。
執(zhí)行過程:1.每個獨立的進(jìn)程有一個程序運行的入口、順序執(zhí)行序列和程序入口萄传。
? ? 但是線程不能獨立執(zhí)行甚颂,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制秀菱。
? ? ? ? ? 2.線程是處理器調(diào)度的基本單位振诬,但是進(jìn)程不是。
1衍菱、線程安全是:
如果多個線程每次運行結(jié)果和單線程運行的結(jié)果是一樣的赶么,而且其他的變量的值也和預(yù)期的是一樣的,就是線程安全的脊串。
2辫呻、線程不安全:
在多個線程同時訪問同一個對象時會發(fā)生數(shù)據(jù)錯誤、不完整等情況時 那就是線程不安全.
創(chuàng)建線程的三種方式和線程池的優(yōu)點
創(chuàng)建線程的三種方式:
1琼锋,繼承Thread類創(chuàng)建線程放闺。
2,實現(xiàn)Runnable接口創(chuàng)建線程缕坎。
3怖侦,使用Callable和Future創(chuàng)建線程。
線程池的優(yōu)點:
1谜叹,避免了因為線程的創(chuàng)建和銷毀鎖帶來的性能開銷匾寝。
2,有效控制線程池的最大并發(fā)數(shù)荷腊,避免大量的線程之間因搶占系統(tǒng)資源而阻塞艳悔。
3,能夠?qū)€程進(jìn)行簡單的管理女仰,并提供定時很钓、定期等功能操作。
synchronized與Lock的區(qū)別
1.synchronized是java內(nèi)置關(guān)鍵字董栽,在jvm層面。Lock是一個java類企孩;
2.synchronized無法判斷是否獲取鎖的狀態(tài)锭碳,Lock可以判斷是否獲取到鎖;
3.synchronized會自動釋放鎖勿璃,Lock需在finally中手工釋放鎖(unlock()方法釋放鎖)擒抛,否則容易造成線程死鎖推汽;
4.用synchronized關(guān)鍵字的兩個線程1和線程2,如果當(dāng)前線程1獲得鎖歧沪,線程2線程等待歹撒。如果線程1阻塞,線程2則會一直等待下去诊胞,而Lock鎖就不一定會等待下去暖夭,如果嘗試獲取不到鎖,線程可以不用一直等待就結(jié)束了撵孤;
5.synchronized的鎖可重入迈着、不可中斷、非公平邪码,而Lock鎖可重入裕菠、可判斷、可公平(兩者皆可)
6.Lock鎖適合大量同步的代碼的同步問題闭专,synchronized鎖適合代碼少量的同步問題奴潘。