張 博
(長沙師范學(xué)院 電子信息工程系, 湖南 長沙 410100)
J2ME中CLDC平臺執(zhí)行并發(fā)多任務(wù)的研究和實現(xiàn)
張 博
(長沙師范學(xué)院 電子信息工程系, 湖南 長沙 410100)
J2ME為移動無線設(shè)備帶來了Java語言的平臺無關(guān)性,能夠動態(tài)地、安全地以各種類型的網(wǎng)絡(luò)向移動無線設(shè)備傳送交互內(nèi)容和應(yīng)用程序,并可以按用戶的需求定制應(yīng)用程序。首先介紹了 J2ME平臺,接著介紹了CLDC,同時對CLDC環(huán)境下多線程程序的開發(fā)及應(yīng)用進行了深入探討。最后對給出的解決方案進行了討論并指出其實用性。
J2ME;CLDC;多任務(wù);多線程
當(dāng)前, 各種智能消費類電子產(chǎn)品,如移動電話、PDA、電視機頂盒等呈現(xiàn)爆炸性增長,其數(shù)量已經(jīng)大大超過桌面PC,數(shù)字計算的重點也從單純的面向Internet的網(wǎng)絡(luò)計算向移動計算發(fā)展,人們希望可以隨時隨地以任意設(shè)備實現(xiàn)信息的獲取和共享,進行商務(wù)貿(mào)易等。無所不在的普適網(wǎng)絡(luò)和種類繁多、功能日益強大的終端,已經(jīng)構(gòu)成人們生活的重要環(huán)境—普適環(huán)境。普適環(huán)境帶來了以普適網(wǎng)絡(luò)為基礎(chǔ)的計算環(huán)境,并且提供了多種移動終端的接入方式。在普適環(huán)境下的計算模式被認為是一種普適計算(Ubiquitous/Pervasive Computing)。J2ME技術(shù)實際上就是在普適計算環(huán)境發(fā)展背景下發(fā)展起來的。
Java移動軟件平臺采用的基本Java平臺是CLDC (Connected Limited Device Configuration)和MIDP (Mobile Information Device Profile),是J2ME平臺 (Java 2 Micro Edition)構(gòu)成的一部分,常被應(yīng)用于手機等移動設(shè)備上。但CLDC的Java執(zhí)行與處理始終在多線程單進程狀態(tài)階段,自然也就無法滿足目前用戶的需要,而Java語言又具有易開發(fā),成本低、兼容性強等特點。因此繼續(xù)CLDC環(huán)境下的Java開發(fā)使用,重新構(gòu)建CLDC環(huán)境結(jié)構(gòu),使其具有多任務(wù)線程的執(zhí)行處理能力。
國外大多開放式J2ME平臺系統(tǒng)也借助于CLDC環(huán)境和其豐富的軟件資源。在系統(tǒng)體系結(jié)構(gòu)上,開發(fā)了典型的CLDC設(shè)備的大體架構(gòu),且為移動設(shè)備定義了一個標(biāo)準(zhǔn)的Java平臺。由于CLDC環(huán)境運行于一個宿主操作系統(tǒng)之上,宿主操作系統(tǒng)為CLDC環(huán)境虛擬機提供管理底層硬件的必備能力。國外研究者從上開發(fā)了CLDC的多線程技術(shù),這也是實現(xiàn)CLDC下的多進程技術(shù)的基礎(chǔ)。但目前國外研究者卻因為市場需求的緊迫性逐步放棄了CLDC的多進程研究,從而發(fā)展LINUX架構(gòu)。
國內(nèi)一般將J2ME技術(shù)稱為“無線Java”技術(shù),目前國內(nèi)的J2ME平臺的開發(fā)一直在低端設(shè)備要求的運行情況下研發(fā),當(dāng)然存在功能需求上的不足,而市場上其他非Java平臺的移動設(shè)備又造價高昂,無法適應(yīng)國內(nèi)市場,且目前技術(shù)水平下的CLDC平臺又不能滿足當(dāng)前用戶的需求,故而對J2ME平臺的設(shè)計迫在眉睫。
Sun Microsystems 將J2ME定義為“一種以廣泛的消費性產(chǎn)品為目標(biāo)的高度優(yōu)化的 Java運行時環(huán)境, 包括尋呼機、移動電話、可視電話、數(shù)字機頂盒和汽車導(dǎo)航系統(tǒng)。”由于各種移動設(shè)備具有各種不同的硬件配置,所以為它們提供一種普遍適用的開發(fā)平臺幾乎是不可能的,所以,J2ME定義了兩種類型的規(guī)范,它們攜手提供一種移動Java平臺。這兩種平臺就是配置(configuration)和描述(Profile)。
J2ME利用配置來根據(jù)各種設(shè)備的運算能力和供電能力把設(shè)備分為CLDC(Connected Limited Device Configuration)和CDC(Connected Device Configuration)。通過配置來提供支持一組通用設(shè)備的最小Java平臺,作為這類設(shè)備的最低配置來保證不同設(shè)備間的平臺兼容性。這里所說的平臺主要指JVM和Java核心庫,在配置中舍棄了設(shè)備的特殊性來保證Java平臺的兼容性,因此為了支持具體設(shè)備所獨有的功能和硬件條件,J2ME提供了描述(Profile)來體現(xiàn)設(shè)備的特殊性。描述(Profile)是根據(jù)每類設(shè)備的功能定義的與設(shè)備特性相關(guān)的API.。
關(guān)于J2ME的體系結(jié)構(gòu),可以用圖1表示。
圖1 J2ME體系結(jié)構(gòu)Fig. 1 J2ME system structure
J2ME的配置層將基本運行時環(huán)境定義為一組核心類和一個運行在特定類型設(shè)備上的特定JVM。雖然將來可能定義其他配置,但當(dāng)前J2ME存在兩種配置[1]:
1)連接限制設(shè)備配置(Connected Limited Device Configuration:CLDC)與KVM一起用于內(nèi)存有限的16位或32位設(shè)備。這是用于開發(fā)小型J2ME應(yīng)用程序的配置。CLDC同時還是用于開發(fā)繪圖工具應(yīng)用程序的配置。Palm電腦便是一個運行小應(yīng)用程序的小型無線設(shè)備的示例。
2)連接設(shè)備配置(Connected Device Configuration:CDC)與C虛擬機(CVM)一起使用,用于要求內(nèi)存超過2兆的32位體系結(jié)構(gòu)?;ヂ?lián)網(wǎng)電視機頂盒便是這類設(shè)備的一個示例。
J2ME CLDC是由 Java Community Process 創(chuàng)建的。正如Sun Microsystems 所定義的那樣,它的標(biāo)準(zhǔn)是“輕便、覆蓋區(qū)域的Java構(gòu)建塊,適合小型的、有資源限制的設(shè)備”[2]。使用CLDC開發(fā)的J2ME應(yīng)用程序的目標(biāo)設(shè)備通常具有以下特征[3]:可供Java平臺使用的160到512千字節(jié)的總內(nèi)存;功率有限,常常是電池供電;網(wǎng)絡(luò)連通性,常常是無線的、不一致的連接并且?guī)捰邢蓿挥脩艚涌诨靵y,程度參差不齊;有時根本就沒有接口。J2ME CLDC配置簡要描述了高度限制設(shè)備上每個J2ME執(zhí)行所要求的一套最基本的庫和Java虛擬機特征。CLDC主要面向那些網(wǎng)絡(luò)連接速度慢、能源有限(經(jīng)常是電池供電)、具有大于等于128 KB的穩(wěn)定內(nèi)存、以及大于等于32 KB的不穩(wěn)定內(nèi)存的設(shè)備。不穩(wěn)定內(nèi)存是不持久的并且沒有寫保護,這意味著如果關(guān)掉設(shè)備,內(nèi)存中的內(nèi)容將全部丟失。而穩(wěn)定內(nèi)存中的內(nèi)容是持久的,并且有寫保護。CLDC設(shè)備使用穩(wěn)定內(nèi)存來存儲運行時的庫和KVM,或存儲為某個特殊設(shè)備創(chuàng)建的另一個虛擬機。不穩(wěn)定內(nèi)存被用來分配運行時的內(nèi)存。CLDC定義了下列要求[4]:
1) 完整的Java語言支持(除浮點支持、最終定案和錯誤處理之外);
2) 完整的JVM支持;
3) CLDC的安全性;
4) 有限國際化的支持;
5) 繼承類—所有不針對CLDC的類都必須是J2SE1.3類的子類。
處于“恒”開啟狀態(tài)的持續(xù)性數(shù)據(jù)處理應(yīng)用(如即時消息和無線電子郵件等)是推動多任務(wù)處理的強有力因素。事實上可以說,在不支持多任務(wù)處理的環(huán)境中,這些應(yīng)用程序根本無法運行。在Windows環(huán)境中,即時消息和電子郵件應(yīng)用程序通常在后臺持續(xù)運行,收到新消息或電子郵件時自動切換至前臺。用戶當(dāng)然希望在手機上實現(xiàn)這種功能。與此相似,如果媒體播放器應(yīng)用程序能在來電時暫停并進入后臺,隨后切換至前臺繼續(xù)播放,使用起來自然更為方便。
目前,構(gòu)成移動Java部署的主要是在其自身JVM實例中運行的應(yīng)用程序,且每次只運行一個程序。也就是說,Java應(yīng)用程序之間的切換是通過連續(xù)方式實現(xiàn)的:先啟動JVM,然后加載應(yīng)用程序并運行。如果用戶希望切換到一個新的應(yīng)用程序,就要退出當(dāng)前程序;在該進程重新啟動之前,JVM將處于關(guān)閉狀態(tài)。如果多個應(yīng)用程序能夠并行運行,每個程序都需要加載、分析、校驗并創(chuàng)建所有應(yīng)用程序級的運行時映像。兩種方法都無法實現(xiàn)Java的有效多任務(wù)處理;兩種方法都速度慢、效率低下而且離便于使用的目標(biāo)還相距甚遠。顯然,我們迫切需要一種更好的Java多任務(wù)處理解決方案。多任務(wù)處理更貼近現(xiàn)實用戶行為。現(xiàn)在,用戶使用電腦和PDA應(yīng)用程序時可以在各任務(wù)之間自由切換。要求手機達到這種性能,也是理所當(dāng)然之事;隨著手機和服務(wù)的不斷發(fā)展,除語音通話以外,數(shù)據(jù)使用和其他任務(wù)也得到了日益完善的支持,這就令此類要求更加突出。
我們知道,在操作系統(tǒng)級別上軟件的運行一般都是以進程為單位,而在每個進程的運行過程中允許同時并發(fā)執(zhí)行多個不同線程,這就使得一個程序能同時執(zhí)行不同的操作。使用多線程的目的是為了最大限度地利用計算機CPU資源。Java程序字節(jié)碼最終是在JVM虛擬機下運行的,同一虛擬機進程中的不同操作都是通過多線程來運行的。在Java虛擬機中,線程常用有單線程和多線程,單線程指程序執(zhí)行過程只是一個有效操作的序列,不同操作都有著明確的先后順序;而多線程允許同時進行著不同的操作,這些不同的操作同時并發(fā)進行著,并由CPU時鐘頻率根據(jù)不同的調(diào)度方式對它們進行執(zhí)行調(diào)度。
在手機軟件設(shè)計中,由于同樣需要執(zhí)行網(wǎng)絡(luò)連接(基于HTTP的高級Internet協(xié)議通訊)、UI調(diào)度等待、UI顯示幻化、游戲控制等操作需要通過后臺的數(shù)據(jù)運算或UI不斷更新等操作。因此在J2ME中,KVM虛擬機也提供了功能強大的多線程API,使我們同樣能在J2ME中實現(xiàn)線程的并發(fā)運算。文中將Java語言中繼承Thread類(java.lang.Thread)和直接實現(xiàn)Runnable多線程接口(java.lang.Runnable)的優(yōu)化算法靈活運用于J2ME平臺的CLDC環(huán)境中實現(xiàn)并行多任務(wù)處理,同時創(chuàng)新提出使用任務(wù)組合方式來實現(xiàn)多線程。
通過編寫線程類繼承Thread類并重寫Thread類中的run()方法實現(xiàn)線程,當(dāng)線程對象被運行時候?qū)詣訄?zhí)行run方法中的實體內(nèi)容,從而開辟一個單獨的線程并運行起來。
當(dāng)執(zhí)行start方法時候,將會自動運行run方法,但是執(zhí)行start方法時候只做了一件事,就是將線程轉(zhuǎn)化為可執(zhí)行狀態(tài),然后等待操作系統(tǒng)進行調(diào)度并運行,因此無法保證線程能立即啟動。
線程接口Runnable中只有一個抽象方法run,通過實現(xiàn)Runnable接口中的方法的類即可創(chuàng)建出有多線程特征的對象,但該對象并無法使其啟動線程,需要作為參數(shù)并借助Thread的構(gòu)造方法構(gòu)造創(chuàng)建對象并調(diào)用start方法對線程進行啟動。
如:
由此可見,以上兩種方法都是通過Thread的start來啟動線程的,實際上所有的線程操作都是封裝在Thread這個類中,由Thread對象調(diào)用各種接口來控制線程。
直接繼承Thread類的方法不能再從其他類繼承,編寫簡單,可以直接操作線程;實現(xiàn)Runnable接口的方法可以將CPU、代碼和數(shù)據(jù)分開,形成清晰的模型,還可以繼承其他類,保持程序風(fēng)格的一致性,兩者的重要區(qū)別在于啟動多線程對象的方法設(shè)計方法不同。在具體應(yīng)用中,采用哪種方法來構(gòu)造線程要視情況而定,通常,當(dāng)一個線程已繼承了另一個類時,就只能采用第二種方法來構(gòu)造,即實現(xiàn)Runnable接口。
在J2ME中,同樣具有Java中的任務(wù)處理組合類,他們分別為Timer和TimerTask,可以使用他們實現(xiàn)多線程,簡單說就是定時實現(xiàn)任務(wù)。
Timer是Java中的一個定時器,可以實現(xiàn)在某一時間做某件事或者在某一時間段做某些事,分別通過方法schedule(TimerTask tt,long millis) 和 schedule(TimerTask tt,long start,long off)。
TimerTask是一個任務(wù)類,通過繼承該類并覆蓋方法run即可創(chuàng)建一個任務(wù)。
//3秒鐘后執(zhí)行任務(wù)并且之后每5秒鐘執(zhí)行一次
timer.schedule(new TimerTaskS(),3000,5000);
有此可見在使用計時任務(wù)可以達到實現(xiàn)線程的效果,分別執(zhí)行不同的并發(fā)操作,通過Timer類對象來操作TimerTask對象,通過schedule方法來計時執(zhí)行任務(wù),在結(jié)束任務(wù)的時候,通常使用cancel()來實現(xiàn)。
利用多線程的并發(fā)執(zhí)行特點,無疑會加快程序的運行,提高CPU、內(nèi)存等系統(tǒng)資源的使用效率,但要注意同時運行在內(nèi)存中的多個線程之間的關(guān)系。由于線程執(zhí)行不受建立先后的約束,線程間共享數(shù)據(jù)可能會出現(xiàn)程序員想象不到的事情,還有多個線程同時訪問修改同一個數(shù)據(jù)、資源競爭和死鎖問題,都需要程序員周密的考慮??傮w來說,在程序中決定使用多線程需要權(quán)衡以下幾個問題:1)創(chuàng)建線程需要占用更多的內(nèi)存資源;2)創(chuàng)建線程需要增加CPU跟蹤線程、切換線程的時間開銷;3)多線程編程必須考慮資源共享問題、同時訪問通訊端口問題以及系統(tǒng)資源競爭和死鎖問題;4)同一任務(wù)下的多個線程同時訪問和修改某個數(shù)據(jù)時,要考慮數(shù)據(jù)的安全問題。
由此看出,線程不是越多越好,而是要適度,并且對多線程編程的程序員也提高了要求??傊嗑€程會使軟件編程變得更加靈活,同時也給程序員帶來了更大的機遇和挑戰(zhàn)。
文中基于J2ME平臺的開放式CLDC系統(tǒng),利用Java 語言的可移植性、安全性和兼容性等優(yōu)勢,在目前CLDC多線程的情況下解決不能多進程處理的問題,實現(xiàn)CLDC平臺的多任務(wù)功能,同時使之能適應(yīng)市場上的各種軟硬件資源、保證CLDC與網(wǎng)絡(luò)連接,實現(xiàn)資源共享。針對不同的應(yīng)用要求和應(yīng)用環(huán)境,通過自由選擇與配置不同的硬件與軟件,使J2ME平臺可面向多種設(shè)備使用,具有普適性,從而減少二次開發(fā)的成本投入和開發(fā)的周期。
[1]Sun Microsystems, Inc. JavaTM 2 Platform Micro Edition(J2METM)Technology for Greating Mobile Devices (White Paper)[P].May 19,2000.
[2]Sun Microsystems, Inc. K Virtual Machine (KVM) Specification(KVM Developer Release 4)[P].September 28,1999.
[3]Sun Microsystems, Inc. The CLDC HotSpot Implementation Virtual Machine (White Paper)[P].May 19,2000.
[4]Sun Microsystems, Inc. Connected, Limited Device Configuration(Specification Version 1.0, Java 2 Platform Edition)[P].May 19,2000.
[5]王克宏.Java技術(shù)教程(基礎(chǔ)篇)[M]. 北京: 清華大學(xué)出版社,2005.
[6]耿祥義, 張躍平. Java 2實用教程[M]. 北京: 清華大學(xué)出版社,2006.
[7]J2ME MIDP1.0/2.0無線設(shè)備編程指南[M]. 北京: 北京大學(xué)出版社.
[8]溫尚書. J2ME無線通信實用案例教程[M]. 北京: 清華大學(xué)出版社, 2003.
[9]李振鵬,龔劍. Java開發(fā)利器: J2ME手機游戲開發(fā)技術(shù)詳解[M].北京: 清華大學(xué)出版社, 2006.
[10]黃聰明. Java移動通信程序設(shè)計—J2MEMIDP[M].北京: 清華大學(xué)出版社,2002.
Research and realization of J2ME CLDC platform for the implementation of concurrent multitasking
ZHANG Bo
(Electronic Information Engineering Department,Changsha Normal University,Changsha410100,China)
J2ME brings platform independency inherited from Java language to mobile wireless devices. It enables dynamic and delivery of interactive content and applications to those devices via various network. And it can customize applications according to users,requirement. This paper first gives basic concepts of J2ME platform, then introduces CLDC, depth development and application of the CLDC environment multithreaded. Finally, given solutions were discussed and pointed out its usefulness.
J2ME; CLDC; multi-tasking; multi-threading
TN-9
A
1674-6236(2014)07-0146-04
2013-08-10稿件編號201308071
2013年度湖南省教育廳科學(xué)研究項目支持(13C1070)
張 博(1980—),男,湖南長沙人,碩士研究生,講師。研究方向:圖像處理與模式識別、信號處理、計算機信息安全理論。