




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.第第0909章章 平臺(tái)無(wú)關(guān)語(yǔ)言平臺(tái)無(wú)關(guān)語(yǔ)言 使用平臺(tái)無(wú)關(guān)語(yǔ)言的需求 腳本語(yǔ)言 Java語(yǔ)言.9.1 使用平臺(tái)無(wú)關(guān)語(yǔ)言的需求使用平臺(tái)無(wú)關(guān)語(yǔ)言的需求 高級(jí)程序設(shè)計(jì)語(yǔ)言本應(yīng)是平臺(tái)無(wú)關(guān)的 在高級(jí)語(yǔ)言中,數(shù)據(jù)、控制流等都是抽象的。 源程序經(jīng)過(guò)編譯生成的目標(biāo)碼是與本地機(jī)緊密相關(guān)的。表現(xiàn)在: 基本類型定義與及其字長(zhǎng)相關(guān); 各機(jī)指令集不一,操作效果相當(dāng),實(shí)現(xiàn)過(guò)程有微小的差別; 同一語(yǔ)言在相同編譯和執(zhí)行環(huán)境下,同一程序執(zhí)行速度不一(硬件差異,優(yōu)化次數(shù)); 已采用增加可移植手段。 設(shè)預(yù)定義環(huán)境(包)Ada; 分出頭文件 - 宏 - 編譯文件C;. 單主機(jī)時(shí)代,需要解決的主要問(wèn)題是高級(jí)語(yǔ)言程序可移植性,以減少應(yīng)用
2、程序的開(kāi)發(fā)費(fèi)用,縮短開(kāi)發(fā)周期。這時(shí)對(duì)平臺(tái)無(wú)關(guān)性的要求不是十分迫切。. 局域網(wǎng)時(shí)代,需要在局域網(wǎng)內(nèi)實(shí)現(xiàn)信息共享,有協(xié)作計(jì)算需求。 網(wǎng)絡(luò)協(xié)議棧實(shí)現(xiàn)了數(shù)據(jù)的平臺(tái)無(wú)關(guān); 以文件共享形式實(shí)現(xiàn); 客戶/服務(wù)器模式,程序可以不共享; 只要局域網(wǎng)內(nèi)使用相同或相互兼容的平臺(tái),也可以實(shí)現(xiàn)程序的共享。. Internet時(shí)代,對(duì)資源共享提出了新的要求: 局域網(wǎng)的規(guī)模和結(jié)構(gòu)是可控制的;但是,沒(méi)有任何個(gè)人和機(jī)構(gòu)可以控制Internet的構(gòu)成。 Internet/Intranet包含各種類型計(jì)算機(jī),是資源共享的平臺(tái)。不論用戶使用的是什么類型的計(jì)算機(jī)和操作系統(tǒng),都可以瀏覽網(wǎng)絡(luò)上的信息,使用網(wǎng)絡(luò)中的資源。 Wide Web)
3、是Internet上最廣泛的信息發(fā)布/瀏覽方式。與FTP等以往的方式相比較,WWW具有較強(qiáng)的動(dòng)態(tài)性和交互性,需要完成復(fù)雜的應(yīng)用(如電子商務(wù)等)因此,共享資源不但包括數(shù)據(jù),也應(yīng)包括程序。這就需要一種平臺(tái)無(wú)關(guān)的語(yǔ)言。 激烈的競(jìng)爭(zhēng)迫使軟件生產(chǎn)者不斷降低開(kāi)發(fā)成本,縮短開(kāi)發(fā)周期。平臺(tái)無(wú)關(guān)語(yǔ)言使開(kāi)發(fā)者不需要為一個(gè)軟件開(kāi)發(fā)多個(gè)操作系統(tǒng)的版本,減少了開(kāi)發(fā)費(fèi)用和時(shí)間。. 平臺(tái)無(wú)關(guān)語(yǔ)言的實(shí)現(xiàn): 傳送源代碼 將源代碼傳送到目標(biāo)機(jī),先經(jīng)過(guò)編譯,生成目標(biāo)機(jī)代碼,再執(zhí)行。前提是必須有不同平臺(tái)的編譯器,這種情況往往在編譯時(shí)缺乏源代碼原有的環(huán)境信息(全程量),且只能先編譯存入目標(biāo)碼再運(yùn)行。局域網(wǎng)時(shí)代服務(wù)器已經(jīng)做過(guò)了。要實(shí)時(shí)運(yùn)
4、行只能是解釋(也要求有完整的信息)型語(yǔ)言。 傳送目標(biāo)代碼 只有在相同或相互兼容的平臺(tái)之間才可以實(shí)現(xiàn)。如在Windows NT/9x組成的局域網(wǎng)中,可以在一臺(tái)機(jī)器上調(diào)用執(zhí)行其它機(jī)器上的應(yīng)用程序。 傳送中間代碼 中間代碼由源代碼經(jīng)過(guò)編譯生成。中間代碼經(jīng)過(guò)優(yōu)化。中間代碼傳送到目標(biāo)機(jī)上由解釋器解釋執(zhí)行。Java語(yǔ)言使用的是這種方式。.9.2 腳本語(yǔ)言腳本語(yǔ)言 腳本語(yǔ)言的概述: 描述性語(yǔ)言(4GL); 直接解釋執(zhí)行; 操作系統(tǒng)界面語(yǔ)言的擴(kuò)大泛shell; 輔助開(kāi)發(fā)(不是設(shè)計(jì),但引用內(nèi)部過(guò)程、函數(shù)、對(duì)象);. 常見(jiàn)的腳本語(yǔ)言有: 頁(yè)面描述類:TELEX、Postscript、HTML、VPML; 場(chǎng)景描述
5、類:JavaScript、VBScript/ActiveX腳本、LotusScript(Lotus公司的Notes群件產(chǎn)品中的腳本語(yǔ)言).9.2.1 HTML(Hyper-Text Markup Language) 用于描述Web主頁(yè),為所有OS上的瀏覽器所識(shí); 設(shè)計(jì)編排多媒體主頁(yè)(包括正文字體、圖形、動(dòng)畫); 以超文本方式使用,可以鏈接任何網(wǎng)址上的各種多媒體文檔,包括普通正文、HTML文檔、GIF圖形、TIFF圖形;XBM位圖、JPEG圖形、Postscript文件、AIFF聲音、AU聲音、QuickTime影片、MPEG影片;. 標(biāo)簽。以尖括號(hào)括出的成對(duì)或單個(gè)標(biāo)簽給出頁(yè)面編排信息。 文檔編
6、排、引用描述:一個(gè)HTML文檔文檔簡(jiǎn)介信息文檔內(nèi)容標(biāo)題鏈接名第i層編排此前為一段由此換行產(chǎn)生一個(gè)視窗寬度的水平分行符. 字符格式 邏輯描述:已定義單詞重點(diǎn)詞書或電影主題一段源代碼由此鍵入狀態(tài)信息特別強(qiáng)調(diào) 物理描述:此處黑體此處斜體此處打字機(jī)體. 內(nèi)聯(lián)圖形 其它標(biāo)簽 列表:表項(xiàng)表項(xiàng) (無(wú)號(hào)) (有號(hào)) 表項(xiàng)測(cè)試此表表項(xiàng) (定義表) 預(yù)定義格式正文:此段文本格式已定 作者地址: . 擴(kuò)展引用: 嵌入Java: 嵌入其它描述語(yǔ)言: .9.2.2 JavaScript語(yǔ)言 HTML語(yǔ)言是靜態(tài)的,動(dòng)態(tài)性和交互性不強(qiáng)。于是,Netscape公司開(kāi)發(fā)了JavaScript(與之對(duì)應(yīng)是Microsoft公司的
7、VBScript),擴(kuò)充HTML文檔的功能。 Javascript嵌入在HTML文本中,由瀏覽器解釋執(zhí)行。.以下是一個(gè)HTML文本中嵌入JavaScript的例子:function welcome() var s = “Hello world!”; document.write(s); /document是是HTML文檔對(duì)象文檔對(duì)象 /函數(shù)的定義函數(shù)的定義 welcome() / 函數(shù)的調(diào)用函數(shù)的調(diào)用這個(gè)例子將在瀏覽器中顯示“ Hello world!”字符串?!癲ocument”是HTML文檔對(duì)象,使用它的write方法可以在文檔中寫入文本。. JavaScript有以下特點(diǎn): 與C、Jav
8、a相似的語(yǔ)法,如常規(guī)的變量、表達(dá)式、函數(shù)和控制語(yǔ)句等。 弱類型。有數(shù)字、布爾、字符串和空值類型。變量的確切類型取決于所賦給它數(shù)據(jù)的類型。 基于對(duì)象。把瀏覽器和HTML文檔中的元素看作對(duì)象,對(duì)象有各自的屬性。例如,瀏覽器對(duì)象是已被預(yù)定義的Navigator;HTML頁(yè)面是document對(duì)象。程序員可以使用的對(duì)象及其屬性是已經(jīng)被瀏覽器定義和生成的,不能定義新的類和對(duì)象。因此,是基于對(duì)象而不是面向?qū)ο蟮摹?事件驅(qū)動(dòng)。定義了一組系統(tǒng)、鼠標(biāo)事件。可以通過(guò)事件激活定義好的函數(shù)。 在客戶端使用的小語(yǔ)言.一個(gè)統(tǒng)計(jì)HTML文檔中超鏈接個(gè)數(shù)的程序: for(var i=0; idocument.links.le
9、ngth; i+) document.write(link+(i+1)+: +document.linksi.href+); document.write(There are +document.links.length+ links.);其中,其中,document是整個(gè)是整個(gè)HTML頁(yè)面對(duì)象;頁(yè)面對(duì)象;links是是document對(duì)象對(duì)象中的超鏈接對(duì)象數(shù)組,中的超鏈接對(duì)象數(shù)組,length、href又是又是links的屬性,分別的屬性,分別表示鏈接的數(shù)目、鏈接的內(nèi)容表示鏈接的數(shù)目、鏈接的內(nèi)容.該HTML在瀏覽器中的顯示如下圖所示:.9.3 Java語(yǔ)言9.3.1 Java是C+的網(wǎng)絡(luò)應(yīng)用
10、的擴(kuò)充和改造 保留了高級(jí)語(yǔ)言的主要機(jī)制 與C+基本相同的字符集、標(biāo)識(shí)符、關(guān)鍵字、運(yùn)算符、特殊符號(hào) 比C+更加強(qiáng)化類型。增加了布爾類型,只保留數(shù)組類型;使用真正的類型轉(zhuǎn)換(C+中的類型轉(zhuǎn)換是“偽”的,目的是為了通過(guò)編譯器的檢查;Java中的類型轉(zhuǎn)換在運(yùn)行時(shí)真正發(fā)生,如果不能轉(zhuǎn)換,系統(tǒng)會(huì)拋出異常) 保留聲明、作用域、變量、表達(dá)式、語(yǔ)句、三種結(jié)構(gòu)化控制; 保留并增強(qiáng)C+的異常;. 與C+相似的面向?qū)ο髾C(jī)制:類作為特殊類型、構(gòu)造函數(shù)、初始化序列、實(shí)例變量、this/super、方法的覆蓋與重載、成員可見(jiàn)性。 取消了C+不利于網(wǎng)絡(luò)應(yīng)用的機(jī)制: 指針。以對(duì)象引用代替指針; 取消頭文件和預(yù)處理器(宏與機(jī)器相
11、關(guān)); C+中原有冗余:struct、union都被類代替; 不支持模板,動(dòng)態(tài)束定功能可實(shí)現(xiàn); 取消typedef; 不支持運(yùn)算符重載;.9.3.2 平臺(tái)無(wú)關(guān)性的解決 編譯解釋執(zhí)行。Java語(yǔ)言實(shí)現(xiàn)平臺(tái)無(wú)關(guān)的關(guān)鍵是使用了“編譯-解釋”執(zhí)行方式。Java源代碼經(jīng)過(guò)編譯,稱為Java字節(jié)代碼(byte-code)。Java虛擬機(jī)(VM)是字節(jié)代碼的解釋器。JavaVM是用軟件構(gòu)造的一個(gè)虛擬計(jì)算機(jī),它由虛擬的寄存器、內(nèi)存、堆棧等;字節(jié)代碼就是這臺(tái)虛擬計(jì)算機(jī)的指令。所有操作系統(tǒng)上的JavaVM執(zhí)行一致的指令,這樣,就屏蔽了各個(gè)平臺(tái)之間的差異(如下圖所示)。.Java字節(jié)代碼JavaVM forWind
12、owsJavaVM forSolarisJavaVM forMac OSWindowsSolarisMac OSJava虛擬機(jī)是平臺(tái)無(wú)關(guān)性的關(guān)鍵在不同的操作系統(tǒng)上有不同的Java虛擬機(jī),向上有一致的接口(虛擬機(jī)的指令字節(jié)代碼),向下針對(duì)不同的操作系統(tǒng)有不同的實(shí)現(xiàn)方式。. 即時(shí)編譯(JIT: Just-in-Time Compile)。使用即時(shí)編譯是為了提高Java程序的執(zhí)行效率,是對(duì)Java解釋器的改進(jìn)。即時(shí)編譯在虛擬機(jī)解釋執(zhí)行Java字節(jié)代碼時(shí)發(fā)生。當(dāng)虛擬機(jī)第一次調(diào)用某個(gè)方法時(shí),不再直接解釋這個(gè)方法的字節(jié)代碼,而是用即時(shí)編譯器將這個(gè)方法的字節(jié)代碼編譯成為本機(jī)目標(biāo)代碼,然后執(zhí)行這些目標(biāo)代碼。即
13、時(shí)編譯不是將整個(gè)類的字節(jié)代碼進(jìn)行一次性編譯,而是只編譯正在執(zhí)行的函數(shù),“邊執(zhí)行,邊編譯”。. 小程序(applet)的傳遞運(yùn)行方式 小程序是可以在Web瀏覽器中執(zhí)行的Java程序; Web瀏覽器中有一個(gè)Java虛擬機(jī),和瀏覽器一起構(gòu)成小程序的運(yùn)行環(huán)境; 瀏覽器根據(jù)HTML文檔中的標(biāo)志,從指定的URL下載小程序的類字節(jié)碼(.class文件),裝入到Java虛擬機(jī)中運(yùn)行; 小程序的出現(xiàn)提高了Web頁(yè)面的交互性和動(dòng)態(tài)性,使瀏覽器能夠完成更加復(fù)雜的應(yīng)用。 Java虛擬機(jī)有內(nèi)置的類裝入機(jī)制,從文件系統(tǒng)或網(wǎng)絡(luò)中下載類代碼,然后在虛擬機(jī)中運(yùn)行。瀏覽器下載運(yùn)行小程序只是一個(gè)特例,這種機(jī)制可以被所有Java應(yīng)用
14、程序使用。.9.3.3 Java為應(yīng)用增加的新特性 兩層封裝:包類 “包”是一組功能相近或聯(lián)系緊密的類的集合,同一個(gè)包中的類之間有比較大的訪問(wèn)權(quán)限。包是一種對(duì)語(yǔ)言進(jìn)行擴(kuò)充的機(jī)制。Java的核心類庫(kù)主要由以下幾個(gè)包組成: java.lang - 基本類庫(kù) java.io - 讀、寫流,文件,管道 - 網(wǎng)絡(luò) java.awt - 界面、窗口. java.applet - 小程序類 java.util - 通用工具:向量表、哈希表、棧 “類”與C+的基本相同。Java只有單繼承,類庫(kù)呈樹(shù)狀結(jié)構(gòu),所有類都是java.lang.Object類的子類。. 增加了接口(interface)的機(jī)制。 接口是一
15、種特殊的類,在接口中只有函數(shù)的聲明,而沒(méi)有函數(shù)的具體定義(與C+的純虛類相似)。接口可以繼承,但不能直接由接口生成對(duì)象; 以類實(shí)現(xiàn)(implements)接口,即在類中定義所有接口中聲明的函數(shù)。我們可以把一個(gè)接口看成某種功能的規(guī)定,實(shí)現(xiàn)了接口,就是實(shí)現(xiàn)了某種功能。類的繼承和接口的實(shí)現(xiàn)是多態(tài)的基礎(chǔ)。. 以接口實(shí)現(xiàn)多態(tài)。接口將函數(shù)的聲明和實(shí)現(xiàn)分離,允許幾個(gè)類同時(shí)享有一個(gè)接口。調(diào)用者不需要了解接口的具體實(shí)現(xiàn),以統(tǒng)一的方式使用這些類的對(duì)象。下面是一個(gè)簡(jiǎn)單的例子:interface Drawer public void draw();/ 定義接口class Circular implements Dra
16、wer . . . public void draw()畫一個(gè)圓; / 類Circular實(shí)現(xiàn)了Drawer接口.class Rectangle implements Drawer . . . public void draw()畫一個(gè)矩形; / 類Rectangle實(shí)現(xiàn)了Drawer接口class User void paint(Drawer drawer)drawer.draw(); . . .public static void main() Circular c = new Circular(); Rectangle r = new Rectangle(); User user = n
17、ew User(); user.paint(c);/ 畫圓 user.paint(r);/ 畫方 / End of class Useruser對(duì)象的paint方法使用統(tǒng)一的方式調(diào)用對(duì)象c和r的draw方法,產(chǎn)生不同的結(jié)果。.接口實(shí)現(xiàn)多態(tài)示意圖:. 以接口實(shí)現(xiàn)多繼承。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,間接實(shí)現(xiàn)多繼承,同時(shí)不影響類的繼承結(jié)構(gòu)。Object類 B類 A類 B B類 AA接口C繼承繼承繼承繼承實(shí)現(xiàn)實(shí)現(xiàn)接口D實(shí)現(xiàn)類接口實(shí)現(xiàn). 以synchronized控制模塊的同步 Java使用監(jiān)控器(Monitor)作為線程同步的機(jī)制。每一個(gè)對(duì)象都有一個(gè)監(jiān)控器與之相對(duì)應(yīng)??梢杂胹ynchronized關(guān)鍵字請(qǐng)
18、求得到某個(gè)對(duì)象的監(jiān)控器。在任何時(shí)刻,只能有一個(gè)線程可以擁有某個(gè)對(duì)象的監(jiān)控器。如果有多個(gè)線程申請(qǐng)某個(gè)對(duì)象的監(jiān)控器,系統(tǒng)會(huì)阻塞這些線程。如果監(jiān)控器的使用者釋放了監(jiān)控器的擁有權(quán),系統(tǒng)就會(huì)喚醒某個(gè)申請(qǐng)?jiān)摫O(jiān)控器的阻塞線程。. 增加了修飾符 final:變量或函數(shù)不能被重新賦值或定義。final變量就是常量;final方法是不能被子類覆蓋的方法 native:本地方法聲明,其定義放在本地庫(kù)中 abstract:抽象方法/類。抽象方法是只有聲明而沒(méi)有定義的方法;含有抽象方法的類必須聲明為抽象類 transient:被聲明為transient的變量不能在網(wǎng)絡(luò)中傳遞. 增強(qiáng)對(duì)象性 所有的基本數(shù)據(jù)類型都有與之對(duì)應(yīng)
19、的類:int java.lang.Integershort java.lang.Shortlong java.lang.Longchar java.lang.Characterbyte java.lang.Bytefloat java.lang.Floatdouble java.lang.Doubleboolean java.lang.Boolean. 數(shù)組也是一種對(duì)象。用new語(yǔ)句創(chuàng)建,且有l(wèi)ength屬性; 沒(méi)有獨(dú)立存在的全局變量、函數(shù)。程序完全由對(duì)象和類組成,甚至入口函數(shù)main也必須從屬于某個(gè)類; 對(duì)象引用。所有非基本數(shù)據(jù)類型變量都是對(duì)象的引用。與指針相比,引用只能訪問(wèn)對(duì)象,不能訪問(wèn)內(nèi)
20、存地址。比較 MyClass a; 這個(gè)聲明語(yǔ)句: 在C+中將生成一個(gè)對(duì)象,名為a 在Java中只有一個(gè)對(duì)象的引用a,它不指向任何對(duì)象,只有再通過(guò)a = new MyClass()才能創(chuàng)建一個(gè)對(duì)象.再比較 MyClass myObject;/Java還要執(zhí)行myObject = new MyClass(); myObject = otherObject; 在C+中,myObject始終指向聲明時(shí)分配的存儲(chǔ)區(qū),賦值語(yǔ)句的效果只是將otherObject的值拷貝給myObject對(duì)象 在Java中,myObject和otherObject將成為同一個(gè)對(duì)象的引用,如下圖所示。對(duì)象myObjectMy
21、Object myObject = new MyObject();myObjectotherObject對(duì)象對(duì)象myObject = otherObject;. 支持多線程編程 線程的狀態(tài)初始態(tài):線程對(duì)象被創(chuàng)建但沒(méi)有被運(yùn)行時(shí)的狀態(tài);運(yùn)行態(tài):線程對(duì)象被啟動(dòng),進(jìn)入CPU的調(diào)度隊(duì)列,開(kāi)始執(zhí)行另外的運(yùn)行線索;阻塞態(tài):線程對(duì)象由于某種原因,不能繼續(xù)執(zhí)行,CPU不再為它分配時(shí)間片。但是,這時(shí)的線程仍然是有生命的,一旦條件滿足,它能夠再次進(jìn)入運(yùn)行態(tài),繼續(xù)執(zhí)行剩余的任務(wù);死亡態(tài):線程執(zhí)行完任務(wù),或者被強(qiáng)行結(jié)束。進(jìn)入死亡態(tài)后,該線程不能再次返回運(yùn)行態(tài)。.Java線程狀態(tài)的轉(zhuǎn)化:Java的線程也是對(duì)象,由java
22、.lang.Thread類繼承而來(lái)。Thread類中有run方法,子類線程覆蓋這個(gè)方法,將需要執(zhí)行的語(yǔ)句填入run方法中。這樣,當(dāng)該線程被啟動(dòng)時(shí),它會(huì)自動(dòng)執(zhí)行run方法中的語(yǔ)句。. 線程原語(yǔ)。java.lang.Thread類中有如下方法:start / stop:?jiǎn)?dòng)和停止線程suspend / resume:懸掛和恢復(fù)線程sleep:使線程睡眠join:等待其它線程的停止interrupt:?jiǎn)拘驯蛔枞幕蚴撬叩木€程yield:讓出CPU時(shí)間,使其它線程執(zhí)行. wait / notify (等待-喚醒)原語(yǔ)wait和notify方法是所有Java對(duì)象父類:java.lang.Object類
23、的方法。當(dāng)一個(gè)線程擁有一個(gè)對(duì)象的監(jiān)控器(通過(guò)synchronized關(guān)鍵字)時(shí),它可以調(diào)用該對(duì)象的wait或notify方法。 調(diào)用wait方法,該線程將放棄該對(duì)象的監(jiān)控器,并且被阻塞,直到其它線程調(diào)用了該對(duì)象的notify方法喚醒它為止。 調(diào)用notify方法,該線程將喚醒某個(gè)由于等待(調(diào)用了wait方法)而被阻塞的線程,將該對(duì)象的監(jiān)控器交給它,使其恢復(fù)執(zhí)行。. 以下是利用Java實(shí)現(xiàn)的生產(chǎn)者-消費(fèi)者問(wèn)題:import java.util.*;public class CPVector pool; /Vector是可以存儲(chǔ)任何對(duì)象的表.這里 / 當(dāng)作產(chǎn)品池.int product = 0;p
24、ublic static int EMPTY = 0;public static int FULL = 25; public static void main(String args)CP cp = new CP();Consumer consumer = new Consumer(cp);Producer producer = new Producer(cp);consumer.start();/啟動(dòng)線程,使其運(yùn)行它的run函數(shù)producer.start();.public CP()pool = new Vector();/CP類的構(gòu)造函數(shù)類的構(gòu)造函數(shù).public synchronize
25、d void produce()try if(pool.size() = FULL)pool.wait(); product+; /produce a product. pool.addElement(new Integer(product);/put the product into the pool. System.out.println(Produce: + product); if(pool.size() = EMPTY + 1)pool.notify();catch(InterruptedException e).public synchronized void consume()t
26、ry int i = pool.size(); if(i = EMPTY)pool.wait(); System.out.println(Consume: + pool.firstElement().toString(); pool.removeElementAt(0); if(pool.size() = FULL - 1)pool.notify();catch(InterruptedException e) /End of class CP.CP類以監(jiān)控器的方式來(lái)管理產(chǎn)品池。它封裝了數(shù)據(jù)對(duì)象產(chǎn)品池,和操縱該對(duì)象的方法生產(chǎn)(produce)和消費(fèi)(consume)方法,并且通過(guò)Java的同步機(jī)
27、制對(duì)這些方法的并發(fā)性進(jìn)行控制。.以下是消費(fèi)者類Consumerclass Consumer extends ThreadCP cp;public Consumer(CP cp)super();this.cp = cp;public void run()/線程的執(zhí)行函數(shù)while(true) cp.consume();/調(diào)用監(jiān)控器的consume方法 Thread.sleep(1000);/模擬做其它工作的時(shí)間 / End of class Consumer.以下是生產(chǎn)者類Producerclass Producer extends ThreadCP cp;public Producer(CP
28、cp)super();this.cp = cp;/ 構(gòu)造函數(shù)public void run()while(true) duce();/調(diào)用監(jiān)控器的produce方法 Thread.sleep(200);/模擬做其它工作的時(shí)間. 線程通信有以下幾種方式:共享對(duì)象管道流異地線程之間可以通過(guò)socket或RMI進(jìn)行通信以下是一個(gè)利用管道流(PipedStream)進(jìn)行線程之間通信的例子。.import java.io.*;public class CommThreadspublic static void main(String args)/ 生成一個(gè)單向管道流PipedInputStr
29、eam in = new PipedInputStream();PipedOutputStream out = new PipedOutputStream(in);Thread sender = new Sender(out);Thread receiver = new Receiver(in);sender.start(); / 啟動(dòng)發(fā)送者線程receiver.start(); / 啟動(dòng)接收者線程.class Receiver extends ThreadPipedInputStream in;public Receiver(PipedInputStream in)super();this.in = in;/ 得到管道流對(duì)象public void run()StringBuffer sBuffer = new StringBuffer();int b = 0;while(b != -1)/如果b=-1,表明已經(jīng)讀完 b = in.read();/從管道中讀取信息 if(b != -1) sBuffer.append(char)b);System.out.println(Receiver: + sBuffer.toString();/ 輸出得到的消息.class Sender extends ThreadPipedOutputStr
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 應(yīng)用電子技術(shù)專業(yè)教學(xué)標(biāo)準(zhǔn)(高等職業(yè)教育??疲?025修訂
- 2024年中國(guó)耐堿膠布市場(chǎng)調(diào)查報(bào)告
- 內(nèi)科疾病診療精要
- 2025年中國(guó)酒類奢侈品行業(yè)市場(chǎng)調(diào)查研究及投資前景預(yù)測(cè)報(bào)告
- 2025年中國(guó)船用雷達(dá)行業(yè)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略規(guī)劃報(bào)告
- 2025年中國(guó)礦用壓縮分離設(shè)備行業(yè)市場(chǎng)深度分析及投資策略咨詢報(bào)告
- 稅務(wù)師老師講課課件下載
- 2023-2029年中國(guó)貴州省大數(shù)據(jù)行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 2022-2027年中國(guó)建筑業(yè)行業(yè)市場(chǎng)全景評(píng)估及發(fā)展戰(zhàn)略規(guī)劃報(bào)告
- 鄭州重介質(zhì)硅鐵粉項(xiàng)目投資分析報(bào)告模板范本
- 重慶市建設(shè)工程施工項(xiàng)目每日“防高墜三檢”檢查記錄表
- GB/T 6438-2007飼料中粗灰分的測(cè)定
- GB 2759-2015食品安全國(guó)家標(biāo)準(zhǔn)冷凍飲品和制作料
- 全國(guó)高中生物優(yōu)質(zhì)課一等獎(jiǎng)《袁隆平與雜交水稻》教學(xué)設(shè)計(jì)
- 高校輔導(dǎo)員手冊(cè)
- 國(guó)開(kāi)電大 社會(huì)統(tǒng)計(jì)學(xué) 形考任務(wù)2答案
- 五年級(jí)英語(yǔ)質(zhì)量調(diào)研卷答題卡
- 二年級(jí)下冊(cè)語(yǔ)文試題 河南省商丘市永城市 第二學(xué)期二年級(jí)語(yǔ)文期末試題(圖片版無(wú)答案)部編版
- 工業(yè)機(jī)器人技術(shù)與智能制造
- 建筑工程聯(lián)營(yíng)合作協(xié)議(合同)
- 最新版焊接工藝評(píng)定格式標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論