摘 要:本文系統(tǒng)介紹了Java多線程技術(shù)的關(guān)鍵環(huán)節(jié),并且闡述了創(chuàng)建線程、調(diào)用線程以及線程同步和線程通信等,詳細(xì)說明了SOCKET套接字的概念和基本原理,并且通過并發(fā)服務(wù)器多用戶網(wǎng)絡(luò)的通信程序,詮釋了開發(fā)客戶機(jī)-服務(wù)器的多線程模式的通信程序的方法。
關(guān)鍵詞:Java;多線程;網(wǎng)絡(luò)通信;應(yīng)用
1 Java簡介
Java最顯著的特征就是在語言中融合了多線程機(jī)制。線程指的就是一個程序中的執(zhí)行流。多個線程可以同時存在于同一進(jìn)程中。通過操作系統(tǒng)對這些線程并發(fā)執(zhí)行調(diào)度,使得任一個線程都仿佛擁有整個獨自的系統(tǒng)資源。JAVA正是因為具有多線程的特性,所以能夠并發(fā)執(zhí)行多個程序。程序開發(fā)人員利用多線程的JAVA編程接口,能夠開發(fā)出與多線程兼容的應(yīng)用程序,從而一定程度上降低設(shè)計并發(fā)程序的難度,使程序執(zhí)行具有更高的效率。
2 創(chuàng)建線程
創(chuàng)建線程一般有兩種途徑:一種是THREAD類繼承的方法創(chuàng)建線程類。RUN0子類重載,創(chuàng)建方法如下:
CLASS THREADNAME EXTENDS THRREAD{
PUBLIC VOID RUN(){//RUN 指的是線程整個類代碼的輸入端
…//代碼運行方式為線程方式
}}
另外一種創(chuàng)建方法是新建帶有RUNNABLE的類。因為JAVA不具有多繼承性,當(dāng)運行方式類似線程并且由另外的類要繼承,就一定要具有RUNNABLE接口。RUN()是RUNNABLE接口的唯一實現(xiàn)方法。此接口在類中的實現(xiàn)方法為:
CLASS TH READNAME EXTENDS APPLET IMPLEMENTS
RUNNABLE{
PUBLIC VOID RUN(){
…
}}
3 調(diào)用線程
當(dāng)用THREAD類繼承的方法創(chuàng)建線程類時,調(diào)用此線程類的方法為:
THREADNAME TEST=NEW THREADNAME();//TEST指的是線程類
THREADNAME的具體實例
TEST. START();
START()表示的是在在線程類中創(chuàng)建的成員函數(shù)。
當(dāng)用新建帶有RUNNABLE的類的方法創(chuàng)建線程類時,調(diào)用此線程類的方法如下:
THREADNAME TEST=NEW TH READNAME();
THREAD TH=NEW THREAD(TEST);//新線程的創(chuàng)建為THREAD
TH.START();
4 線程通信與同步
當(dāng)多個線程同時存在于同一系統(tǒng)中時,需要滿足各線程之間的相互同步及通信,這樣才能保證工作協(xié)調(diào),防止死鎖的發(fā)生。
JAVA主要有3個WAIT()OBJECT標(biāo)準(zhǔn)類方法,NOTIFYALL()、NOTIFY(),還有就是3個THREAD[1]。
類方法RESUME()、SUSPEND()、以及SLEEP()的功能是喚醒或者中斷執(zhí)行線程。當(dāng)SUSPEND()、WAIT()以及sleep()被線程調(diào)用后,可運行狀態(tài)下的線程就會轉(zhuǎn)入BLOCKED阻塞狀態(tài),只要線程的睡眠時間結(jié)束或者是RESUME()或NOTIFY()被另外線程調(diào)用,這個阻塞狀態(tài)下的線程才會轉(zhuǎn)入可運行狀態(tài),系統(tǒng)線程是否能夠占用CPU,關(guān)鍵在于調(diào)度策略。
5 通訊機(jī)制SOCKET
TCP/IP協(xié)議的技術(shù)核心就是物理層、網(wǎng)絡(luò)層以及傳輸層,TCO/IP操作系統(tǒng)可是指能滿足這三層的協(xié)議內(nèi)核。中下層的TCP/IP協(xié)議智能將初始的編程界面對外提供,不能直接提供用戶服務(wù),提供用戶服務(wù)需要依靠核外設(shè)置的應(yīng)用程序來完成[2]。
網(wǎng)間的應(yīng)用程序?qū)τ赥CP/IP協(xié)議所具有的編程界面可以直接進(jìn)行操作。網(wǎng)間網(wǎng)針對TCP/IP協(xié)議的進(jìn)程間主要的作用模型是CLIENT/SERVER客戶端/服務(wù)器模式。服務(wù)器和客戶端是兩個不同的進(jìn)程,也就是應(yīng)用程序,客戶發(fā)送請求服務(wù)給服務(wù)器,服務(wù)器就會相應(yīng)響應(yīng)。
網(wǎng)間網(wǎng)標(biāo)識進(jìn)程的唯一方法是三元組的形式,描述SOCKET用到HALF-SAAOCIATION半相關(guān):
{協(xié)議名稱,地址,端口號}
五元組的形式表示完整的一個網(wǎng)間網(wǎng)通信進(jìn)程。即SOCKET完整的描述形式為ASSOCIATION相關(guān):
{協(xié)議名稱,本地址名稱,本端口號碼,遠(yuǎn)程地址名稱,遠(yuǎn)程端口號碼}
相同的兩個協(xié)議半相關(guān)構(gòu)成合適的一個相關(guān),兩個三元組能夠構(gòu)成五元組。確定的SOCKET具有唯一確定的SOCKET號,這個號是操作系統(tǒng)提供的。SOCKET具有一致性的特點,可以對網(wǎng)絡(luò)進(jìn)程進(jìn)行準(zhǔn)確描述。所以,構(gòu)建服務(wù)器和客戶端的相關(guān)是SOCKET的重中之重。
SOCKET具有兩種通訊方式:無關(guān)聯(lián)和有關(guān)聯(lián),針對的應(yīng)用需求不同。有關(guān)聯(lián)的通訊方式提供了全雙工、可靠的字節(jié)流服務(wù)。通信雙方在有關(guān)聯(lián)的方式下需要創(chuàng)建聯(lián)接過程和通訊鏈路全部的網(wǎng)絡(luò)通信都在這個進(jìn)程中完成,聯(lián)接過程在通信完畢后關(guān)閉。無關(guān)聯(lián)的通訊方式比有關(guān)聯(lián)時系統(tǒng)開銷相對較小,但是提供的數(shù)據(jù)報服務(wù)不可靠,數(shù)據(jù)從信息源發(fā)出不能夠保證到達(dá)信宿。通方式信雙方在無關(guān)聯(lián)方式下不必建立聯(lián)接過程以及通訊鏈路,由進(jìn)程和主機(jī)轉(zhuǎn)發(fā)完成通信。
6 小結(jié)
系統(tǒng)運行和調(diào)度的最小單位是線程,本文系統(tǒng)介紹了JAVA多線程技術(shù)的實現(xiàn)方式,為實際的通信網(wǎng)絡(luò)程序的開發(fā)提供了一定的理論參考。
[參考文獻(xiàn)]
[1]王琳.Java多線程機(jī)制及其應(yīng)用[J].武漢理工大學(xué)學(xué)報,2003,25(5): 38-43.
[2]李誠,等.Java 2簡明教程[M].北京:清華大學(xué)出版社,2004.