姚凱+劉琳琳
摘 要
Java語(yǔ)言的基本運(yùn)行依靠虛擬機(jī),且要求虛擬機(jī)具備不同操作系統(tǒng),因此,其運(yùn)行過(guò)程具備跨多個(gè)平臺(tái)的特征。能夠用于屏蔽其他操作系統(tǒng)之間的差異。對(duì)于網(wǎng)絡(luò)程序的編寫而言,跨平臺(tái)的特征是十分必要的。
【關(guān)鍵詞】網(wǎng)絡(luò)編程 多線程技術(shù) Java
進(jìn)行網(wǎng)絡(luò)編程工作的主要目的是:以網(wǎng)絡(luò)協(xié)議為基礎(chǔ),間接或者直接與不同計(jì)算機(jī)設(shè)備進(jìn)行交流、通訊。當(dāng)前,網(wǎng)絡(luò)編程中存在以下兩方面問(wèn)題:
(1)找準(zhǔn)主機(jī)能夠穩(wěn)定、安全地傳輸數(shù)據(jù);
(2)是否能夠確定網(wǎng)絡(luò)中是一臺(tái)主機(jī)或者多臺(tái)主機(jī)。
計(jì)算機(jī)IP層(位于TCP/IP協(xié)議)的主要功能為定位網(wǎng)絡(luò)中的主機(jī),也是傳輸數(shù)據(jù)的路由器,通過(guò)IP地址能夠直接明確互聯(lián)網(wǎng)中的主機(jī)位置。同時(shí),TCP層可提供數(shù)據(jù)的傳輸機(jī)制,屬于網(wǎng)絡(luò)變成對(duì)象,目前較為流行的網(wǎng)絡(luò)編程模型是客戶機(jī)/服務(wù)器結(jié)構(gòu)。
1 具體與應(yīng)用
當(dāng)運(yùn)行一個(gè)應(yīng)用程序的時(shí)候,就啟動(dòng)了一個(gè)進(jìn)程,當(dāng)然有些會(huì)啟動(dòng)多個(gè)進(jìn)程。啟動(dòng)進(jìn)程的時(shí)候,操作系統(tǒng)會(huì)為進(jìn)程分配資源,其中最主要的資源是內(nèi)存空間,因?yàn)槌绦蚴窃趦?nèi)存中運(yùn)行的。在進(jìn)程中,有些程序流程塊是可以亂序執(zhí)行的,并且這個(gè)代碼塊可以同時(shí)被多次執(zhí)行。實(shí)際上,這樣的代碼塊就是線程體。線程是進(jìn)程中亂序執(zhí)行的代碼流程。當(dāng)多個(gè)線程同時(shí)運(yùn)行的時(shí)候,這樣的執(zhí)行模式成為并發(fā)執(zhí)行。
2 Java多線程
線程的是java.lang.Thread類,在虛擬機(jī)啟動(dòng)之后,通常只有Java類的main方法這個(gè)普通線程運(yùn)行,運(yùn)行時(shí)可以創(chuàng)建和啟動(dòng)新的線程;守護(hù)線程(damon thread),守護(hù)線程在后臺(tái)運(yùn)行,提供程序運(yùn)行時(shí)所需的服務(wù)。當(dāng)虛擬機(jī)中運(yùn)行的所有線程都是守護(hù)線程時(shí),虛擬機(jī)終止運(yùn)行。Java線程模型涉及可以動(dòng)態(tài)更改的線程優(yōu)先級(jí)。線程的優(yōu)先級(jí)是從1到10之間的一個(gè)數(shù)字,數(shù)字越大表明的任務(wù)越緊急。JVM的標(biāo)準(zhǔn)需要先選用較高優(yōu)先級(jí)的線程,再過(guò)渡到較低線程,因此,整個(gè)標(biāo)準(zhǔn)在處理相同級(jí)別的線程時(shí)通常采取隨機(jī)原則,處理線程的關(guān)鍵因素為基層操作系統(tǒng)。
3 在Socket基礎(chǔ)上低層次的Java編程
3.1 通訊
通常情況下,網(wǎng)絡(luò)上的兩個(gè)程序會(huì)有雙向的通訊進(jìn)行連接,以此來(lái)交換數(shù)據(jù),Socket即為該雙向鏈路的一端,它主要用來(lái)連接服務(wù)方與客戶方。其次,它屬于編程界面的一種,較為流行。一個(gè)Socket由一個(gè)端口號(hào)進(jìn)行確定,具有唯一性。
以往的UNIX環(huán)境中,不僅僅只有Socket能夠進(jìn)行TCP/IP協(xié)議,Socket支持的協(xié)議種類較多,這兩者之間不存在必要的相關(guān)性。Socket在Java環(huán)境下需要以TCP/IP協(xié)議作為基礎(chǔ)。
3.2 創(chuàng)建線程分析及線程同步的情況
主要有兩種方式,第一種是運(yùn)用繼承類的Thread的方式進(jìn)行創(chuàng)建,其中的子類重載是run0方式,具體的實(shí)現(xiàn)方式如下所示:class Thead Name extends Thread,其中在線程中類的代碼入口處是以線程的方式運(yùn)行。而第二種方式是建立Runnable的接口類,因?yàn)樵贘ava程序中不支持更多的繼承性,所以為了能夠通過(guò)線性方式更好地運(yùn)行和繼承其他的類,則需要通過(guò)Runnable的接口,而在Runnable中的接口則是能進(jìn)過(guò)run0。
運(yùn)用兩個(gè)或者是兩個(gè)以上的線程可以更好地分享資源,而在實(shí)際操作過(guò)程中就需要充分保障資源的共享性,因此,這就需要運(yùn)用一定的方式充分確定資源情況,并能夠結(jié)合當(dāng)前線程被占用的情況來(lái)達(dá)到此目的,所以這一過(guò)程可以稱之為同步。而在Java中,為了能夠更好地實(shí)現(xiàn)這一不同的目標(biāo),則需要在占用程序中更好地保障線程處于被占用的對(duì)象中,這就需要借助于管程機(jī)制得以實(shí)現(xiàn)。在規(guī)定的時(shí)間中看,可以通過(guò)線程的方式而有效獲得管程,當(dāng)這個(gè)步驟能夠通過(guò)同步的方式而實(shí)現(xiàn)返回目標(biāo)時(shí),此時(shí)的線程可以提升管理的效率。然而在Java中需要對(duì)每個(gè)對(duì)象都進(jìn)行不同鎖定,并結(jié)合每一個(gè)線程而組合一個(gè)集合,從而能夠保證對(duì)象能夠順利生成。
4 TCP與UDP兩類傳輸協(xié)議
在TCP/IP協(xié)議名稱中雖然只存在TCP這一個(gè)協(xié)議名,但在這個(gè)傳輸層中卻同時(shí)包含有TCP與UDP這兩個(gè)協(xié)議,其中TCP是一種面向連接以保障傳輸可靠性的協(xié)議,TCP的全稱為Tranfer Control Protocol,通過(guò)該協(xié)議,通常可以得到無(wú)差錯(cuò)的數(shù)據(jù)流,且是順序的,能夠在接收方和發(fā)送方這兩個(gè)成對(duì)的socket之間建立連接,從而在TCP協(xié)議的基礎(chǔ)上實(shí)現(xiàn)通信。UDP屬于一種一種無(wú)連接的協(xié)議,其全稱為User Datagram Protocol,能夠在網(wǎng)絡(luò)上以任何可能的路徑傳達(dá)到目的地,所以在這個(gè)過(guò)程中,傳達(dá)目的地以及傳達(dá)內(nèi)容的準(zhǔn)確性是無(wú)法得到保障的。由于TCP協(xié)議是一個(gè)面向連接的協(xié)議,所以往往在建立數(shù)據(jù)連接之前需要建立數(shù)據(jù)連接,從而會(huì)多出一個(gè)建立連接的時(shí)間,影響傳輸效率。
5 總結(jié)
總而言之,編程是被個(gè)別創(chuàng)建的,可以歸類到線程組中,為方便調(diào)試和監(jiān)視,線程可以將它們歸類到線程組中,在創(chuàng)建線程的同時(shí)將其與一個(gè)線程組進(jìn)行關(guān)聯(lián),因而線程組組織線程在使用大量線程的程序時(shí)可能具有與非常重要的作用。
計(jì)算機(jī)網(wǎng)絡(luò)主要是通過(guò)通信設(shè)施、傳輸介質(zhì)以及網(wǎng)絡(luò)通信協(xié)議,將地點(diǎn)分散的計(jì)算機(jī)設(shè)備進(jìn)行互聯(lián),從而實(shí)現(xiàn)數(shù)據(jù)傳輸系統(tǒng)和資源共享,而網(wǎng)絡(luò)編程通過(guò)程序的編寫能夠?qū)崿F(xiàn)設(shè)備之間的數(shù)據(jù)傳輸,其中Java語(yǔ)言通過(guò)其提供的接口能夠?yàn)榫W(wǎng)絡(luò)編程提供極大方便。
參考文獻(xiàn)
[1]徐凱.Java多線程技術(shù)的網(wǎng)絡(luò)編程探究[J].電腦知識(shí)與技術(shù),2015,12(03).
[2]李玉君,陳莉莉.淺析Java多線程技術(shù)在網(wǎng)絡(luò)通信中的應(yīng)用研究[J].電子技術(shù)與工程軟件,2016,06(22).
[3]申時(shí)全.Java多線程技術(shù)的網(wǎng)絡(luò)并發(fā)編程及應(yīng)用研究[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2016,11(06).