Java編程語言自身缺點還需要改善
Java編程語言如何驗證自己的問題所在呢?這些問題需要我們不斷的學(xué)習(xí)相關(guān)語言語法,下面我們就來仔細的研究一下有關(guān)Java編程語言容易發(fā)生的問題。希望大家在以后的使用中注意。
一般來說,很難按照普通的規(guī)范對 Java編程語言的多線程程序進行驗證。同樣,開發(fā)自動化工具對于常見的并發(fā)問題(例如死鎖、活動鎖和資源耗盡)進行完整而簡單的分析也不太容易——特別是在任意 Java編程語言程序中或者在缺乏并發(fā)的正式模型的時候。
更糟的是,并發(fā)性問題出了名的變化多端、難于跟蹤。每個 Java 開發(fā)人員都曾經(jīng)聽說過(或者親自編寫過)這樣的 Java 程序:經(jīng)過嚴格分析,而且正常運行了相當一段時間,沒有表現(xiàn)出潛在的死鎖。然后突然有一天,問題發(fā)生了,結(jié)果弄得開發(fā)團隊經(jīng)歷許多的不眠之夜來試圖發(fā)現(xiàn)并修補根本原因。#t#
一方面,多線程 Java編程語言程序容易發(fā)生的錯誤非常不明顯,有可能在任意什么時候發(fā)生。另一方面,完全有可能這些 bug 在程序中從不出現(xiàn)。問題取決于一些不可知的因素。多線程程序的復(fù)雜本質(zhì),使得人們很難有效地對其進行驗證。沒有一套現(xiàn)成的規(guī)則可以找出多線程代碼中的這類問題,也無法確切地證明這些問題不存在,這些導(dǎo)致許多 Java編程語言 開發(fā)人員完全避開多線程應(yīng)用程序的設(shè)計和開發(fā),即使用并發(fā)和并行的方式對系統(tǒng)進行建模會非常棒,他們也不使用多線程。
確實想進行多線程編程的開發(fā)人員通常準備好了以下一個或兩個解決方案(至少是一部分):
長時間艱苦地測試代碼,找出所有出現(xiàn)的并發(fā)性問題,誠心地希望到應(yīng)用程序真正運行地時候已經(jīng)發(fā)現(xiàn)并修復(fù)了所有這類問題。
大量運行設(shè)計模式和為多線程編程建立的指導(dǎo)原則。但是,這類指導(dǎo)原則只在整個系統(tǒng)都按照它們的規(guī)范設(shè)計的時候才有效,沒有設(shè)計規(guī)則能夠覆蓋所有類型的系統(tǒng)。
雖然知道的人不多,但是對于編寫(然后驗證)正確的多線程應(yīng)用程序這一問題,還有第三個選項。使用稱為通信順序進程( Communicating Sequential Processes,CSP)的精確的線程同步的數(shù)學(xué)理論,可以在設(shè)計時***地處理死鎖和活動鎖之類的問題。CSP 由 C.A.R. Hoare 與 20 世紀 70 年代后期設(shè)計,CSP 提供了有效的方法,證明用它的構(gòu)造和工具構(gòu)建的系統(tǒng)可以免除并發(fā)的常見問題。
在這份面向 Java編程語言 程序員的 CSP 全面介紹中,我把重點放在克服多線程應(yīng)用程序開發(fā)常見問題的***步上,即了解這些問題。我介紹了 Java編程語言 平臺上目前支持的多線程編程構(gòu)造,解釋了它們的起源,討論了這類程序可能會有的問題。我還解釋了用正式理論在任意的、大型的和復(fù)雜的應(yīng)用程序中清除這些問題(即競爭冒險、死鎖、活動鎖和資源耗盡)或者證明這些問題不存在的困難。