廖先琴
摘 要:JAVA語言是一種應用非常廣泛的語言,從桌面應用程序到WEB應用都有其身影的存在,WEB項目中的服務器端就有如Servlet、JSP和數(shù)目眾多的第三方框架支持,JAVA能在WEB應用中爭得一席之地與它的各種特性是分不開的,其中就包括它出色的多線程機制。本文將在眾多文獻基礎上,探討WEB項目中如何應用好JAVA的多線程機制。
關鍵詞:WEB;JAVA多線程
1 WEB項目應用JAVA的優(yōu)勢
在WEB開發(fā)項目中,可供選擇的語言并不少,當前尤以JAVA語言最為受到程序開發(fā)人員的寵愛,它是一種面向?qū)ο蟮木幊陶Z言,在1995年SUN公司推出,之后就迅速的憑借它的高度通用型、強大的可移植性以及安全性迅速流行起來,滲透到了眾多開發(fā)領域。在現(xiàn)在的WEB項目開發(fā)中,服務器端程序設計是非常重要的部分。用JAVA作為開發(fā)語言有著明顯的優(yōu)勢:(1)支持多線程,并具有出色的多線程安全機制。作為接受眾多客戶訪問的服務器,必須要求能夠妥善處理各種并發(fā)事件,也就是用于開發(fā)服務器端的語言一定要支持多線程且應具備較高的多線程安全性。(2)通用性強。在許多的WEB項目中,服務器端還可能面臨來自不同類型客戶端的訪問,所以開發(fā)服務器端的語言還應具有較高的通用性。
2 JAVA的多線程及應用方法
進程并不會執(zhí)行代碼,代碼的執(zhí)行體是線程,一般的情況下,我們所說的多線程是指程序在計算機上存在多個控制流并發(fā)執(zhí)行,它們均屬于同一個進程。操作系統(tǒng)一般會提供基本的多線程操作API并維護多線程環(huán)境,包括堆棧、寄存器、環(huán)境變量、句柄等等。我們想用JAVA的多線程,就應該先了解JAVA的多線程。JAVA的多線程用法比操作系統(tǒng)提供的原始的多線程相關API更加的簡單,也更加的安全,許多多線程編程中需要注意的問題JAVA都已經(jīng)幫開發(fā)人員做好了,因此,開發(fā)人員可以很容易的應用JAVA寫出能夠良好運行的多線程程序,從而節(jié)省出更多的精力用于功能程序設計上。
2.1 JAVA下多線程的創(chuàng)建
使用JAVA創(chuàng)建多線程有兩種方法,一種是讓線程類從Thread繼承,然后重載它的run()方法,重載后的run()方法將作為該類的線程代碼入口點。另一種方法是讓編寫的線程類實現(xiàn)Runnalbe接口,并重載接口里面的run()方法。之所以有兩種創(chuàng)建方法是為了消除JAVA的單繼承局限性。
2.2 JAVA的多線程使用方法
編寫多線程程序,便避不開一些多線程調(diào)度的問題,多線程在運行期間共享資源的管理、線程之間的同步都需要考慮。JAVA提供了一些機制來做這些事情。在對共享資源訪問的問題上,可以用Synchronized關鍵字,將訪問共享資源的代碼方法前加上該關鍵字就可以保證該代碼塊同一時間只能有一個線程在運行。在JAVA線程同步問題上,有兩個重要的方法,分別是wait()和notify()。wait()方法的作用是停止線程的運行,等待其他線程通知后在繼續(xù)運行;notify()方法的作用通知某線程可以繼續(xù)運行。以上為JAVA中編寫多線程程序必須掌握的基本技術,除此之外還有線程讓步、線程合并以及線程優(yōu)先級的設定等常用技術也應掌握。
2.3 多線程的生命周期
在WEB項目中,編寫多線程程序幾乎是必須的,怎樣利用有限的系統(tǒng)資源合理利用多線程是開發(fā)人員必須考慮的問題。一般情況下,網(wǎng)絡服務器中的線程按照功能可以分為兩類,一類用作并發(fā)服務,而另一類用作反復服務。JAVA中的線程起于線程類中的start方法,之后轉(zhuǎn)入到就緒狀態(tài),等待操作系統(tǒng)進行資源調(diào)度,操作系統(tǒng)完成準備任務后,將執(zhí)行上文中提到的run()方法,線程開始運行。運行過程中,線程可以在就緒、阻塞狀態(tài)當中轉(zhuǎn)換,最后當不再需要該線程時,會觸發(fā)InterruptedException異常,系統(tǒng)會截獲該異常并結(jié)束線程。
3 使用JAVA多線程值得注意的問題
多線程程序的編寫復雜程度遠超單線程程序,但在WEB項目的開發(fā)中又必須依靠多線程來提高系統(tǒng)服務效率,所以在應用JAVA多線程進行編程時一定要小心,避免因應用多線程而導致系統(tǒng)出現(xiàn)問題,最常見的問題就是在并發(fā)系統(tǒng)中的公平性與安全性問題。
在WEB應用中會存在多個客戶,程序需要經(jīng)常訪問服務器中的共享資源,雖然服務器程序在宏觀上是保持并發(fā)性的,但是在微觀上各個線程卻是獨占系統(tǒng)資源執(zhí)行的,并發(fā)性的本質(zhì)其實是CPU快速的在不同線程間切換執(zhí)行。多個線程對共享資源訪問時,如果處理不好就會導致數(shù)據(jù)安全性問題或者是反方向的線程公平性問題。
為了數(shù)據(jù)安全性,在編寫多線程程序時對共享資源的訪問設置一般都是線程獨占的,同一時刻只能有一個線程訪問,其他線程處于等待狀態(tài)。如果說在系統(tǒng)里的多線程中存在部分優(yōu)先級較其他線程優(yōu)先級高并且一直都有高優(yōu)先級線程插隊訪問資源,那么對于低優(yōu)先的線程就是不公平的,表現(xiàn)出來的現(xiàn)象可能就是執(zhí)行某一個功能但是服務器無回應。反之,如果過多的關注線程之間的公平性,那么有可能造成本應由優(yōu)先級更高的線程獲得資源,但是卻被低優(yōu)先級線程長期占有。處理數(shù)據(jù)安全性與線程公平性的問題,最好的方法是依靠線程運行情況動態(tài)的調(diào)整線程優(yōu)先級,視情況不同采取不同的控制調(diào)配策略。
[參考文獻]
[1]顧曉寧.基于JAVA語言在WEB開發(fā)的知識探討[J].湖北函授大學學報,2012(01).
[2]高飛.使用JAVA語言開發(fā)WEB應用軟件的知識探討[J].電子世界,2012(05).
[3]李雙權(quán).一種Java多線程可達性測試框架系統(tǒng)的研究和實現(xiàn)[D].暨南大學,2003(04).
[4]韋慶清,任衛(wèi)東.Java多線程編程中數(shù)據(jù)安全的應用研究[J].現(xiàn)代計算機,2012(09).