日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

多线程某个线程异常了怎么处理_技术分享|Java多线程之高并发处理

發布時間:2025/3/15 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程某个线程异常了怎么处理_技术分享|Java多线程之高并发处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

黃? 靜

合肥科技研發中心

進程與線程的簡介

(1)?進程是指一個內存中運行的應用程序,每個進程都有自己獨立的一塊內存空間,即進程空間或(虛空間)。

(2)?線程是指進程中的一個執行流程,一個進程中可以運行多個線程。比如java.exe進程中可以運行很多線程。線程總是屬于某個進程,沒有自己獨立的虛擬地址空間,與進程內的其他線程一起共享該進程的所有資源。

(3)?進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大的提高了程序的運行效率:

  • 從執行角度來看,線程不能夠獨立執行,必須依存于進程,由進程提供多個線程執行。

  • 從邏輯角度來看,多線程的意義在于一個進程中,有多個執行流程可以同時執行。

線程生命周期的簡介

(1)?一個線程被創建之后,進入新建狀態,JVM則給他分配內存空間,并進行初始化操作。

(2)?當線程對象調用了start()方法,該線程處于就緒狀態(即可執行狀態),JVM會為其創建方法調用棧和程序計數器,處于可執行狀態下的線程隨時可以被CPU調度執行。CPU執行該線程的時候,該線程進入執行狀態。

(3)?執行過程中,該線程遇到wait()方法進入等待狀態;當線程調用同步方法時,在沒有獲取到鎖的情況下,進入阻塞狀態。

(4)?進入等待狀態或阻塞狀態后,可通過notify()或者notifyAll()方法喚醒,重新獲取對象鎖之后再進入就緒狀態,等待CPU調度進入執行狀態。

(5)?當線程執行完或者return線程正常結束。如果運行時發生未經處理的異常,則線程因為異常而結束。

用流程圖直觀的描述如下:

Java多線程風險

(1)?安全性問題:會存在如下安全問題:內存共享、指令重排序、并行運行、操作順序不可預測、會在串行編程模型中引入非串行因素,產生奇怪的結果等。例如經典賬戶存取款案例,如下:

從運行結果來看,賬戶只有100,分別取錢2次,金額分別是80和90,最后賬戶的余額還是10,產生了線程不安全問題。

(2)?活躍性問題:在串行程序中,無意中發生的無限循環,使得程序不能按照設計的流程繼續執行,無法執行后面的代碼,或者由于資源競爭而導致的死鎖等。例如,如果線程1在等待線程2釋放其持有的資源,而線程2永遠不釋放該資源,那么A就會永久地等待下去。

(3)?性能問題:在多線程程序中,不僅存在單線程程序相同的性能問題,而且還存在由于使用線程而引入的其他性能問題。例如服務時間過長,響應不靈敏,吞吐率過低,資源消耗過高,或者可伸縮性較低等。

多線程高并發風險處理方案

(1)?修改線程模型:不在線程之間共享該狀態變量。

(2)?同步機制:通過synchronize和Lock可以實現同步,即當某一線程修改或訪問可變變量時加鎖,獨占對象,讓其他線程進不來。但是該方法容易造成死鎖,所以要設計合理的釋放鎖的機制。

(3)?使用線程池:重用存在的線程,減少對象創建消亡的開銷,可有效的控制最大并發線程數,提高系統資源利用率。

(4)?使用線程安全類:例如HashTable、StringBuffer都是線程安全的。

(5)?設計線程安全類:越早設計線程安全類,后期花費的代價就越小。設計線程安全類時,一般有如下流程:

  • 找出構成對象狀態的所有變量;

  • 找出約束狀態變量的不變性條件;

  • 建立對象狀態的并發訪問管理策略:java監聽器模式或線程安全委托。

寫在最后

多線程高并發需要良好的設計來提升線程的性能,但無論如何線程總會帶來額外的開銷,本文意在讓大家對線程高并發有一個初步的認識,深入學習還需要不斷積累。

總結

以上是生活随笔為你收集整理的多线程某个线程异常了怎么处理_技术分享|Java多线程之高并发处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。