亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java線程模型缺陷研究

2019-11-18 15:44:53
字體:
來源:轉載
供稿:網友

  java 編程語言的線程模型可能是此語言中最薄弱的部分。它完全不適合實際復雜程序的要求,而且也完全不是面向對象的。本文建議對 Java 語言進行重大修改和補充,以解決這些問題。

  Java 語言的線程模型是此語言的一個最難另人滿足的部分。盡管 Java 語言本身就支持線程編程是件好事,但是它對線程的語法和類包的支持太少,只能適用于極小型的應用環境。

  關于 Java 線程編程的大多數書籍都長篇累牘地指出了 Java 線程模型的缺陷,并提供了解決這些問題的急救包(Band-Aid/邦迪創可貼)類庫。我稱這些類為急救包,是因為它們所能解決的問題本應是由 Java 語言本身語法所包含的。從長遠來看,以語法而不是類庫方法,將能產生更高效的代碼。這是因為編譯器和 Java 虛擬器 (JVM) 能一同優化程序代碼,而這些優化對于類庫中的代碼是很難或無法實現的。

  Allen Holub 指出,在我的《Taming Java Threads 》(請參閱 參考資料 )書中以及本文中,我進一步建議對 Java 編程語言本身進行一些修改,以使得它能夠真正解決這些線程編程的問題。本文和我這本書的主要區別是,我在撰寫本文時進行了更多的思考, 所以對書中的提議加以了提高。這些建議只是嘗試性的 -- 只是我個人對這些問題的想法,而且實現這些想法需要進行大量的工作以及同行們的評價。但這是究竟是一個開端,我有意為解決這些問題成立一個專門的工作組,假如您感愛好,請發 e-mail 到 threading@holub.com 。一旦我真正著手進行,我就會給您發通知。

  這里提出的建議是非常大膽的。有些人建議對 Java 語言規范 (JLS)(請參閱參考資料 )進行細微和少量的修改以解決當前模糊的 JVM 行為,但是我卻想對其進行更為徹底的改進。

  在實際草稿中,我的許多建議包括為此語言引入新的要害字。雖然通常要求不要突破一個語言的現有代碼是正確的,但是假如該語言的并不是要保持不變以至于過時的話,它就必須能引入新的要害字。為了使引入的要害字與現有的標識符不產生沖突,經過細心考慮,我將使用一個 ($) 字符,而這個字符在現有的標識符中是非法的。(例如,使用 $task,而不是 task)。此時需要編譯器的命令行開關提供支持,能使用這些要害字的變體,而不是忽略這個美元符號。

  task(任務)的概念

  Java 線程模型的根本問題是它完全不是面向對象的。面向對象 (OO) 設計人員根本不按線程角度考慮問題;他們考慮的是同步 信息 異步 信息(同步信息被立即處理 -- 直到信息處理完成才返回消息句柄;異步信息收到后將在后臺處理一段時間 -- 而早在信息處理結束前就返回消息句柄)。Java 編程語言中的 Toolkit.getImage() 方法就是異步信息的一個好例子。 getImage() 的消息句柄將被立即返回,而不必等到整個圖像被后臺線程取回。

  這是面向對象 (OO) 的處理方法。但是,如前所述,Java 的線程模型是非面向對象的。一個 Java 編程語言線程實際上只是一個run() 過程,它調用了其它的過程。在這里就根本沒有對象、異步或同步信息以及其它概念。

  對于此問題,在我的書中深入討論過的一個解決方法是,使用一個Active_object。 active 對象是可以接收異步請求的對象,它在接收到請求后的一段時間內以后臺方式得以處理。在 Java 編程語言中,一個請求可被封裝在一個對象中。例如,你可以把一個通過 Runnable 接口實現的實例傳送給此 active 對象,該接口的 run() 方法封裝了需要完成的工作。該 runnable 對象被此 active 對象排入到隊列中,當輪到它執行時,active 對象使用一個后臺線程來執行它。

  在一個 active 對象上運行的異步信息實際上是同步的,因為它們被一個單一的服務線程按順序從隊列中取出并執行。因此,使用一個 active 對象以一種更為過程化的模型可以消除大多數的同步問題。

  在某種意義上,Java 編程語言的整個 Swing/AWT 子系統是一個 active 對象。向一個 Swing 隊列傳送一條訊息的唯一安全的途徑是,調用一個類似SwingUtilities.invokeLater() 的方法,這樣就在 Swing 事件隊列上發送了一個 runnable 對象,當輪到它執行時, Swing 事件處理線程將會處理它。

  那么我的第一個建議是,向 Java 編程語言中加入一個task (任務)的概念,從而將active 對象集成到語言中。( task的概念是從 Intel 的 RMX 操作系統和 Ada 編程語言借鑒過來的。大多數實時操作系統都支持類似的概念。)

  一個任務有一個內置的 active 對象分發程序,并自動治理那些處理異步信息的全部機制。

  定義一個任務和定義一個類基本相同,不同的只是需要在任務的方法前加一個asynchronous 修飾符來指示 active 對象的分配程序在后臺處理這些方法。

  所有的寫請求都用一個dispatch() 過程調用被放在 active-object 的輸入隊列中排隊。在后臺處理這些異步信息時出現的任何異常 (exception) 都由 Exception_handler 對象處理,此 Exception_handler 對象被傳送到 File_io_task 的構造函數中。

  這種基于類的處理方法,其主要問題是太復雜了 -- 對于一個這樣簡單的操作,代碼太雜了。向 Java 語言引入$task 和 $asynchronous 要害字后,就可以按下面這樣重寫以前的代碼:

  注重,異步方法并沒有指定返回值,因為其句柄將被立即返回,而不用等到請求的操作處理完成后。所以,此時沒有合理的返回值。對于派生出的模型,$task 要害字和 class 一樣同效: $task 可以實現接口、繼續類和繼續的其它任務。標有 asynchronous 要害字的方法由 $task 在后臺處理。其它的方法將同步運行,就像在類中一樣。

  $task要害字可以用一個可選的 $error 從句修飾 (如上所示),它表明對任何無法被異步方法本身捕捉的異常將有一個缺省的處理程序。我使用 $ 來代表被拋出的異常對象。假如沒有指定 $error 從句,就將打印出一個合理的出錯信息(很可能是堆棧跟蹤信息)。

  注重,為確保線程安全,異步方法的參數必須是不變 (immutable) 的。運行時系統應通過相關語義來保證這種不變性(簡單的復制通常是不夠的)。

  所有的 task 對象必須支持一些偽信息 (pseudo-message)。

  除了常用的修飾符(public 等), task 要害字還應接受一個 $pooled(n) 修飾符,它導致 task 使用一個線程池,而不是使用單個線程來運行異步請求。 n 指定了所需線程池的大?。槐匾獣r,此線程池可以增加,但是當不再需要線程時,它應該縮到原來的大小。偽域 (pseudo-field) $pool_size 返回在 $pooled(n) 中指定的原始 n 參數值。

  在《Taming Java Threads 》的第八章中,我給出了一個服務器端的 socket 處理程序,作為線程池的例子。它是關于使用線程池的任務的一個好例子。其基本思路是產生一個獨立對象,它的任務是監控一個服務器端的 socket。每當一個客戶機連接到服務器時,服務器端的對象會從池中抓取一個預先創建的睡眠線程,并把此線程設置為服務于客戶端連接。socket 服務器會產出一個額外的客戶服務線程,但是當連接關閉時,這些額外的線程將被刪除。

  Socket_server對象使用一個獨立的后臺線程處理異步的 listen() 請求,它封裝 socket 的“接受”循環。當每個客戶端連接時, listen() 請求一個 Client_handler 通過調用 handle() 來處理請求。每個 handle() 請求在它們自己的線程中執行(因為這是一個 $pooled 任務)。

  注重,每個傳送到$pooled $task 的異步消息實際上都使用它們自己的線程來處理。典型情況下,由于一個 $pooled $task 用于實現一個自主操作;所以對于解決與訪問狀態變量有關的潛在的同步問題,最好的解決方法是在 $asynchronous 方法中使用 this 是指向的對象的一個獨有副本。這就是說,當向一個 $pooled $task 發送一個異步請求時,將執行一個 clone() 操作,并且此方法的 this 指針會指向此克隆對象。線程之間的通信可通過對 static 區的同步訪問實現。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人午夜在线视频一区| 亚洲国产三级网| 91精品国产综合久久香蕉922| 国产欧美一区二区三区久久| 国产日韩在线亚洲字幕中文| 国产91色在线| 欧美在线视频播放| 777国产偷窥盗摄精品视频| 久久人人爽亚洲精品天堂| 亚洲色图偷窥自拍| 色在人av网站天堂精品| 国产精品电影在线观看| 国产欧美精品一区二区三区介绍| 日韩电影免费观看在线| 尤物yw午夜国产精品视频明星| 亚洲bt天天射| 在线性视频日韩欧美| 91精品美女在线| 亚洲女人天堂色在线7777| 亚洲欧美综合区自拍另类| 亚洲日韩中文字幕在线播放| 日日狠狠久久偷偷四色综合免费| 欧美日韩中文字幕在线视频| 欧美在线视频免费播放| 黄色一区二区三区| 久热在线中文字幕色999舞| 欧美xxxx14xxxxx性爽| 国产欧美va欧美va香蕉在线| 欧美性猛交xxxx富婆弯腰| 91色在线观看| 亚洲女人被黑人巨大进入| 在线看日韩欧美| 不卡中文字幕av| 中文字幕亚洲欧美日韩高清| 亚洲精品美女在线观看| 不用播放器成人网| 欧美xxxx18国产| 欧美又大粗又爽又黄大片视频| 欧美成人性生活| 91色在线观看| 亚洲欧美国产一本综合首页| 91国产一区在线| www.欧美三级电影.com| 国产视频精品va久久久久久| 性日韩欧美在线视频| 中文字幕免费精品一区高清| 亚洲二区在线播放视频| 亚洲乱码av中文一区二区| 久久夜色精品亚洲噜噜国产mv| 国产精品成人免费视频| 国产精品电影网| zzjj国产精品一区二区| 日韩乱码在线视频| 日韩网站在线观看| 日韩精品免费视频| 国产精品久久久久一区二区| 波霸ol色综合久久| 亚洲视频在线观看免费| 成人av在线网址| 久久人人爽亚洲精品天堂| 性日韩欧美在线视频| 日韩精品久久久久| 欧美日韩福利视频| 亚洲国产小视频在线观看| 精品美女永久免费视频| 超在线视频97| 亚洲韩国青草视频| 成人午夜在线影院| 亚洲va久久久噜噜噜久久天堂| 这里只有精品在线观看| 日韩av片永久免费网站| 日韩在线小视频| 免费91麻豆精品国产自产在线观看| 欧美最猛性xxxxx(亚洲精品)| 日韩电影免费观看在线观看| 亚洲视频在线看| 黑人巨大精品欧美一区二区| 北条麻妃99精品青青久久| 久久不射热爱视频精品| 欧美一级黑人aaaaaaa做受| 久久人人看视频| 国产97在线视频| 精品久久久久久中文字幕大豆网| 亚洲精品久久久久中文字幕二区| 亚洲iv一区二区三区| 国产精品入口日韩视频大尺度| 亚洲成成品网站| 国产精品女视频| 尤物九九久久国产精品的分类| 久久精品国产一区二区三区| 国产成人精品视频| 亚洲人成自拍网站| 91国在线精品国内播放| 久久久999国产| 在线播放精品一区二区三区| 日韩在线观看视频免费| 国产精品电影一区| 亚洲精品91美女久久久久久久| 一区二区福利视频| 91欧美日韩一区| 日本精品久久中文字幕佐佐木| 亚洲区免费影片| 国产自产女人91一区在线观看| 精品无人国产偷自产在线| www.日韩不卡电影av| 欧美激情中文字幕乱码免费| 成人xxxxx| 欧洲成人午夜免费大片| 成人久久18免费网站图片| 亚洲欧美综合另类中字| 亚洲精品久久久久久久久| 黄色精品一区二区| 亚洲精品白浆高清久久久久久| 久久人人爽人人爽人人片av高请| 国语自产偷拍精品视频偷| 亚洲在线视频观看| 亚洲自拍欧美另类| 亚洲跨种族黑人xxx| 色中色综合影院手机版在线观看| 欧美日韩国产成人高清视频| 国产丝袜一区二区三区免费视频| 久久精品一本久久99精品| 狠狠做深爱婷婷久久综合一区| 欧亚精品中文字幕| 国产va免费精品高清在线观看| 欧美黑人一级爽快片淫片高清| 亚洲欧美日韩久久久久久| 18性欧美xxxⅹ性满足| 亚洲欧美一区二区激情| 久久精品国产69国产精品亚洲| 美日韩丰满少妇在线观看| 国产精品av免费在线观看| 国产91精品最新在线播放| 2019中文字幕在线观看| 国产一区欧美二区三区| 欧美激情小视频| 欧美成人免费全部观看天天性色| 久久久久北条麻妃免费看| 欧美黄色片在线观看| 91精品国产乱码久久久久久久久| 日韩精品极品视频| 亚洲综合自拍一区| 亚洲第一区中文99精品| 影音先锋欧美在线资源| 亚洲性视频网站| 久久天天躁夜夜躁狠狠躁2022| 日本精品在线视频| 精品亚洲男同gayvideo网站| 91亚洲精品在线观看| 久久99国产精品久久久久久久久| 国产欧美va欧美va香蕉在线| 久久久久久久91| 狠狠躁夜夜躁人人爽超碰91| 国色天香2019中文字幕在线观看| 蜜臀久久99精品久久久无需会员| 久久精品国产一区二区三区| 国产丝袜一区二区三区免费视频| 久久久在线视频| 亚洲欧美日韩直播| 热门国产精品亚洲第一区在线| 亚洲美女av网站| 国产精品日韩欧美| 国外日韩电影在线观看| 日韩成人在线电影网|