国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Java多線程技術(shù)在網(wǎng)絡(luò)通信系統(tǒng)中的應(yīng)用

2019-12-04 04:16:01盛琳陽(yáng)盛芳圓

盛琳陽(yáng) 盛芳圓

摘要:多線程技術(shù)是Java高級(jí)程序語(yǔ)言解決并發(fā)處理問(wèn)題的解決方案,被廣泛應(yīng)用于具有網(wǎng)絡(luò)通信功能的軟件開(kāi)發(fā)工作。本文分析了線程之間通信的原理,介紹了Java多線程技術(shù)實(shí)現(xiàn)網(wǎng)絡(luò)通信的原理,指出了Java多線程技術(shù)實(shí)現(xiàn)線程安全及同步控制的有效途徑,提出了基于Java多線程技術(shù)的網(wǎng)絡(luò)通信系統(tǒng)實(shí)現(xiàn)方法改進(jìn)方案。

關(guān)鍵詞:Java高級(jí)程序語(yǔ)言;多線程技術(shù);網(wǎng)絡(luò)通信系統(tǒng)

中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2019)08-0108-01

1 線程之間通信的原理

軟件程序進(jìn)行資源分配和調(diào)度的基本單位被稱(chēng)為進(jìn)程,進(jìn)程中一個(gè)單一順序的控制流被稱(chēng)為線程,線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。進(jìn)程與線程之間的區(qū)別就在于進(jìn)程有獨(dú)立的存儲(chǔ)空間,而線程之間要共享同一個(gè)存儲(chǔ)空間。一個(gè)軟件程序在運(yùn)行時(shí)需要有多個(gè)線程同時(shí)存在,則稱(chēng)其具有多線程特性。在多線程場(chǎng)景下各線程共享CPU和內(nèi)存,會(huì)出現(xiàn)線程的資源使用和存儲(chǔ)空間沖突的情況,如線程同步問(wèn)題、線程牽制問(wèn)題等。

多線程技術(shù)對(duì)線程的管理,就是讓線程之間共享資源,通過(guò)程序干預(yù)來(lái)控制線程的執(zhí)行,在必要時(shí)刻還要干擾線程獲取資源來(lái)實(shí)現(xiàn)系統(tǒng)的共享資源異步訪問(wèn)機(jī)制。多線程實(shí)現(xiàn)了線程的資源異步訪問(wèn),也實(shí)現(xiàn)了線程之間的通信和執(zhí)行排序任務(wù)。

2 Java多線程技術(shù)實(shí)現(xiàn)網(wǎng)絡(luò)通信的原理

網(wǎng)絡(luò)通信系統(tǒng)一般分為服務(wù)器和客戶端兩個(gè)組件。早期的服務(wù)器端口只能和一個(gè)客戶端進(jìn)行通信,當(dāng)前一個(gè)通信未完成時(shí)后續(xù)訪問(wèn)都處于等待狀態(tài),只有關(guān)閉端口重新連接才能進(jìn)行新的線程通信。隨著程序設(shè)計(jì)語(yǔ)言的不斷發(fā)展和網(wǎng)絡(luò)環(huán)境的不斷優(yōu)化,網(wǎng)絡(luò)通信系統(tǒng)都具備了多服務(wù)器和多客戶端相互訪問(wèn)的能力。在解決網(wǎng)絡(luò)通信問(wèn)題時(shí)就需要多線程技術(shù)的支持。

Java的多線程技術(shù)支持線程共享存儲(chǔ)空間的機(jī)制,并且實(shí)現(xiàn)了不同線程之間的信息同步與交流,即網(wǎng)絡(luò)通信。Java語(yǔ)言處理多線程問(wèn)題的步驟如下:(1)對(duì)處理多線程的條件指令進(jìn)行校驗(yàn)判斷,只有在校驗(yàn)通過(guò)的情況下才可以讓后續(xù)的線程繼續(xù)執(zhí)行;(2)當(dāng)某一個(gè)線程指令完成后,要通知條件指令進(jìn)行二次校驗(yàn),滿足條件后讓其他線程繼續(xù)執(zhí)行;(3)執(zhí)行上述兩個(gè)步驟,讓線程不斷循環(huán)執(zhí)行下去,實(shí)現(xiàn)了不間斷的網(wǎng)絡(luò)通信功能。

3 Java多線程技術(shù)實(shí)現(xiàn)線程安全及同步控制

多線程編程會(huì)遇到最大的挑戰(zhàn)就是線程安全和同步控制問(wèn)題。線程安全是指線程并行執(zhí)行時(shí)出現(xiàn)的數(shù)據(jù)和執(zhí)行問(wèn)題,比如線程A在進(jìn)行集合的遍歷查詢,線程B則在進(jìn)行集合的清空操作,這兩個(gè)線程A和B如果同時(shí)進(jìn)行會(huì)出現(xiàn)問(wèn)題,誰(shuí)先執(zhí)行也會(huì)對(duì)對(duì)方的正常執(zhí)行造成影響。同步控制是指在線程A操作數(shù)據(jù)時(shí)通知其他線程無(wú)法獲得當(dāng)前數(shù)據(jù),只有線程A完成后其它線程才可以進(jìn)行訪問(wèn)。Java多線程技術(shù)實(shí)現(xiàn)線程安全及同步控制的和新方法有synchronized同步鎖、wait/notify等待/通知機(jī)制、信號(hào)量機(jī)制等。(1)synchronized 同步鎖。Java使用synchronized關(guān)鍵字來(lái)實(shí)現(xiàn)線程同步鎖機(jī)制,線程可以使用synchronized來(lái)申請(qǐng)資源鎖定,別的線程在訪問(wèn)帶有synchronized關(guān)鍵字的資源時(shí)就會(huì)自動(dòng)進(jìn)入等待狀態(tài)。當(dāng)持有synchronized鎖的線程完成操作后,可以釋放同步鎖讓其他線程繼續(xù)訪問(wèn)系統(tǒng)資源。(2)wait/notify等待/通知機(jī)制。在處理線程數(shù)量較大,彼此之間頻繁通信的多線程場(chǎng)景下,可以使用喚醒等待機(jī)制來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)通信功能。Java中的wait/notify2個(gè)方法就實(shí)現(xiàn)了線程的等待通知機(jī)制。wait/notify指令要在synchronized 同步鎖的基礎(chǔ)上執(zhí)行。對(duì)于獲得synchronized 同步鎖的線程,如果在執(zhí)行過(guò)程中需要等待,可以調(diào)用wait方法來(lái)進(jìn)入堵塞隊(duì)列,與此同時(shí)synchronized 鎖也會(huì)失效,其他線程開(kāi)始獲得同步鎖進(jìn)行處理,處理完成后調(diào)用notify方法來(lái)歸還synchronized 同步鎖。當(dāng)堵塞隊(duì)列中有較多線程排隊(duì)時(shí),調(diào)用了notify方法的線程會(huì)隨機(jī)通知一個(gè)等待線程進(jìn)行激活,也可以調(diào)用notifyAll方法來(lái)通知所有等待的線程,得到通知的線程會(huì)進(jìn)入就緒隊(duì)列進(jìn)行后續(xù)處理。

4 Java多線程實(shí)現(xiàn)通信編程

Socket是Java多線程技術(shù)的主要類(lèi)實(shí)現(xiàn),網(wǎng)絡(luò)通信編程又稱(chēng)為Socket編程。Socket編程基于TCP網(wǎng)絡(luò)西醫(yī),分別實(shí)現(xiàn)服務(wù)器和客戶端。調(diào)用ServerSocket來(lái)構(gòu)建服務(wù)器線程,為服務(wù)器設(shè)置固定的IP和端口號(hào);多個(gè)客戶端程序可以借助Socket實(shí)現(xiàn)與服務(wù)器的通信和交互,連接結(jié)束后服務(wù)器還會(huì)創(chuàng)建一個(gè)Socket對(duì)象來(lái)記錄該次連接。Java多線程實(shí)現(xiàn)通信編程的過(guò)程如下:(1)網(wǎng)絡(luò)通信系統(tǒng)服務(wù)器端實(shí)現(xiàn)。創(chuàng)建服務(wù)對(duì)象ServerSocket創(chuàng)建服務(wù)器對(duì)象,讓服務(wù)器線程等待客戶端請(qǐng)求,并返回一個(gè)代表本次連接的Socket對(duì)象。ServerSocket對(duì)象的主要方法有:新建對(duì)象,讓更多的連接進(jìn)行定義;按照一定規(guī)則構(gòu)建數(shù)據(jù)交換機(jī)制,記錄各個(gè)線程的輸入輸出情況;關(guān)閉連接和其他系統(tǒng)資源。(2)網(wǎng)絡(luò)通信系統(tǒng)客戶端實(shí)現(xiàn)。服務(wù)器端進(jìn)入等待狀態(tài)后,可以初始化Socket對(duì)象來(lái)向服務(wù)器端發(fā)送請(qǐng)求連接申請(qǐng),獲得申請(qǐng)?jiān)S可后則按照一定規(guī)則進(jìn)行數(shù)據(jù)交互,完成連接和操作后也要進(jìn)行客戶端的連接關(guān)閉實(shí)現(xiàn)。

5 Java多線程實(shí)現(xiàn)網(wǎng)絡(luò)通信系統(tǒng)的改進(jìn)思路

傳統(tǒng)的網(wǎng)絡(luò)通信系統(tǒng)的服務(wù)器程序只能完成一次讀取操作,當(dāng)Socket對(duì)象生成并完成請(qǐng)求應(yīng)答后,在進(jìn)行后續(xù)請(qǐng)求就要斷開(kāi)重連,否則就會(huì)對(duì)系統(tǒng)服務(wù)器造成較大性能影響。為了解決這一問(wèn)題,可以使用無(wú)限循環(huán)語(yǔ)句while(true)來(lái)實(shí)現(xiàn)服務(wù)器端的反復(fù)進(jìn)行,但由于程序完成一次信息讀取后就會(huì)進(jìn)入等待狀態(tài),再使用無(wú)限循環(huán)語(yǔ)句也不會(huì)有什么實(shí)際的意義。為了解決無(wú)限循環(huán)鎖死的問(wèn)題,使用現(xiàn)成技術(shù)手段讓服務(wù)器在循環(huán)內(nèi)讀取Socket信息。具體方法就是在服務(wù)器結(jié)構(gòu)中加入內(nèi)部類(lèi)ReadMessageThread,實(shí)現(xiàn)多客戶端訪問(wèn)服務(wù)器的安全和同步管控。

蒙自县| 平阴县| 樟树市| 新和县| 稷山县| 葫芦岛市| 湄潭县| 壤塘县| 泰宁县| 乌鲁木齐市| 中阳县| 庄浪县| 介休市| 菏泽市| 桐梓县| 绍兴市| 高州市| 巴东县| 湘乡市| 嘉荫县| 怀宁县| 牙克石市| 定兴县| 新巴尔虎左旗| 普兰店市| 龙游县| 佛学| 甘肃省| 石首市| 海安县| 九龙坡区| 广东省| 鞍山市| 凤庆县| 宝坻区| 灵川县| 霍城县| 长岭县| 茶陵县| 蒙阴县| 郴州市|