java中的并發(fā)和并行是什么?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的宜興網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
并發(fā)與并行
并發(fā):是指在某個時間段內(nèi),多任務(wù)交替的執(zhí)行任務(wù)。當有多個線程在操作時,把CPU運行時間劃分成若干個時間段,再將時間段分配給各個線程執(zhí)行。 在一個時間段的線程代碼運行時,其它線程處于掛起狀。
并行:是指同一時刻同時處理多任務(wù)的能力。當有多個線程在操作時,cpu同時處理這些線程請求的能力。
所以在并發(fā)環(huán)境下,程序的封閉性被打破,出現(xiàn)以下特點:
1、并發(fā)程序之間有相互制約的關(guān)系。直接制約體現(xiàn)為一個程序需要另一個程序的計算結(jié)果;間接體現(xiàn)為多個程序競爭共享資源,如處理器、緩沖區(qū)等。
2、并發(fā)程序的執(zhí)行過程是斷斷續(xù)續(xù)的。程序需要記憶現(xiàn)場指令及執(zhí)行點。
3、當并發(fā)數(shù)設(shè)置合理并且CPU擁有足夠的處理能力時,并發(fā)會提高程序的運行效率。
在并發(fā)環(huán)境中,當一個對象可以被多個線程訪問到時,會造成該對象可以被任何訪問到的線程進行修改,從而出現(xiàn)數(shù)據(jù)不一致的情況。所以提出線程安全的概念。
線程基本概念介紹
線程與進程
進程:每個進程都有獨立的代碼和數(shù)據(jù)空間(進程上下文),進程間的切換會有較大的開銷,一個進程包含1--n個線程。(進程是資源分配的最小單位) 。簡單講進程就是在某種程度上相互隔離的、獨立運行的程序。
線程:同一類線程共享代碼和數(shù)據(jù)空間,每個線程有獨立的運行棧和程序計數(shù)器(PC),線程切換開銷小。(線程是cpu調(diào)度的最小單位)
線程和進程一樣分為五個階段:創(chuàng)建、就緒、運行、阻塞、終止。
1、創(chuàng)建: 新創(chuàng)建了一個線程對象,還未調(diào)用start()方法。 如 Thread thread = new Thread();
2、就緒: 線程對象創(chuàng)建后,其他線程(比如main線程)調(diào)用了該對象的start()方法。該狀態(tài)的線程位于可運行線程池中,等待被線程調(diào)度選中 獲取cpu 的使用權(quán) 。
3、運行: 運行狀態(tài)(runnable)的線程獲得了cpu 時間片(timeslice) ,執(zhí)行程序代碼。
4、阻塞(Blocked):線程被阻塞了,“阻塞狀態(tài)”與“等待狀態(tài)”的區(qū)別是:“阻塞狀態(tài)”在等待著獲取到一個排它鎖,這個事件將在另外一個線程放棄這個鎖的時候發(fā)生;而“等待狀態(tài)”則是在等待一段時間,或者喚醒動作的發(fā)生。在程序等待進入同步區(qū)域(synchronized)的時候,線程將進入這種狀態(tài)。
(一). 等待阻塞: 運行(running) 的線程執(zhí)行o.wait()方法,JVM會把該線程放入等待隊列(waitting queue)中。
(二). 同步阻塞: 運行(running) 的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池(lock pool)中。
(三). 其他阻塞: 運行(running) 的線程執(zhí)行Thread.sleep(long ms)或t.join()方法,或者發(fā)出了I/O請求時,JVM會把該線程置為阻塞狀態(tài)。當sleep()狀態(tài)超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉(zhuǎn)入 可運行(runnable) 狀態(tài)。
5、等待: 進入該狀態(tài)的線程需要等待其他線程做出一些特定動作(通知或中斷)。
6、阻塞:當一個線程試圖獲取一個內(nèi)部的對象鎖(非java.util.concurrent庫中的鎖),而該鎖被其他線程持有,則該線程進入阻塞狀態(tài)。
7、等待:當一個線程等待另一個線程通知調(diào)度器一個條件時,該線程進入等待狀態(tài)。例如調(diào)用:Object.wait()、Thread.join()以及等待Lock或Condition。
8、超時等待(TIMED_WAITING):該狀態(tài)不同于WAITING,它可以在指定的時間后自行返回。
9、終止(TERMINATED):表示該線程已經(jīng)執(zhí)行完畢。
關(guān)于java中的并發(fā)和并行是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。