在J2ME中使用Timer和TimerTask來(lái)實(shí)現(xiàn)多線(xiàn)程_JSP教程
推薦:分割字符串以增強(qiáng)J2ME的String能力從JDK1.4以后,String類(lèi)中新增了split方法來(lái)實(shí)現(xiàn)字符串的分割,但是在J2ME中卻沒(méi)有該方法(MIDP2.0中也沒(méi)有實(shí)現(xiàn)),但是在實(shí)際使用過(guò)程中,有些時(shí)候的確要用到這種操作,這里將我以前實(shí)
眾所周知,Java語(yǔ)言在語(yǔ)言的低層就支持多線(xiàn)程,在Java中可以使用兩種方式來(lái)實(shí)現(xiàn)多線(xiàn)程操作,這兩種方式依次是:
1、繼承Thread類(lèi)
2、實(shí)現(xiàn)Runnable接口
但是Java語(yǔ)言中還有兩個(gè)類(lèi),可以組合來(lái)實(shí)現(xiàn)多線(xiàn)程的控制,這兩個(gè)類(lèi)就是java.util包中的Timer和TimerTask類(lèi)。和上面的實(shí)現(xiàn)方式相比,使用這種方式來(lái)實(shí)現(xiàn)多線(xiàn)程,可以很方便的開(kāi)啟多個(gè)線(xiàn)程,并且代碼的結(jié)構(gòu)比較清晰,但是創(chuàng)建類(lèi)的數(shù)量比較多,系統(tǒng)開(kāi)銷(xiāo)稍微大一些。下面詳細(xì)進(jìn)行一下介紹:
Timer類(lèi)是一個(gè)定時(shí)器,可以每隔一段固定的時(shí)間做一件事情,而且可以很方便的停止這些動(dòng)作。依次為:
構(gòu)造對(duì)象: Timer timer = new Timer();
對(duì)象創(chuàng)建以后,可以使用其中的schedule或者是scheduleAtFixedRate方法起啟動(dòng)一個(gè)任務(wù)(Task)動(dòng)作。需要停止時(shí),可以調(diào)用Timer對(duì)象的cancel方法實(shí)現(xiàn),該方法可以停止該Timer啟動(dòng)的所有任務(wù)(Task)。
TimerTask類(lèi)是一個(gè)線(xiàn)程類(lèi),所有線(xiàn)程的動(dòng)作代碼都寫(xiě)在該類(lèi)內(nèi)部。TimerTask是一個(gè)抽象類(lèi),在實(shí)際使用過(guò)程中,一般是繼承TimerTask類(lèi),然后實(shí)現(xiàn)實(shí)際的操作,停止TimerTask可以使用TimerTask對(duì)象里面的cancel方法。
下面是一個(gè)實(shí)現(xiàn)簡(jiǎn)單的數(shù)字變化的J2ME代碼:
package import java.util.*; import javax.microedition.lcdui.*; /** * 使用Timer和TimerTask實(shí)現(xiàn)多線(xiàn)程 * 該代碼實(shí)現(xiàn)的功能是屏幕上的數(shù)字一直增加,按下5鍵暫停,再次按下5鍵繼續(xù)增加 */ public class NumberCanvas extends Canvas { /**定時(shí)器*/ Timer timer; /**屏幕上顯示的數(shù)字*/ private int number = 0; /**屏幕寬度*/ private int width; /**屏幕高度*/ private int height; public NumberCanvas() { //獲得屏幕的高度和寬度 width = this.getWidth(); height = this.getHeight(); //啟動(dòng)線(xiàn)程 start(); } /** * 啟動(dòng)線(xiàn)程 */ private void start(){ if(timer == null){ //啟動(dòng)定時(shí)器 timer = new Timer(); timer.schedule(new NumberTimerTask(),0,300); } } /** * 停止線(xiàn)程 */ private void stop(){ if(timer != null){ //停止線(xiàn)程 timer.cancel(); timer = null; } } /** * 按鍵處理 * @param keyCode int 按下的鍵值 */ public void keyPressed(int keyCode){ //判斷按下的數(shù)字鍵5 if(keyCode == Canvas.KEY_NUM5){ //判斷當(dāng)前的狀態(tài) if(timer == null){ start(); }else{ stop(); } } } protected void paint(Graphics g) { //清屏 g.setColor(0xffffff); g.fillRect(0,0,width,height); g.setColor(0x000000); g.drawString(String.valueOf(number),50,50,Graphics.TOP | Graphics.LEFT); } /** * 線(xiàn)程任務(wù)動(dòng)作 */ public class NumberTimerTask extends TimerTask{ public void run(){ //數(shù)字增加 number ; //重繪 repaint(); } } } |
分享:使用Java編寫(xiě)Palm OS程序的解決方案1使用Java語(yǔ)言為 Palm OS編寫(xiě)程序的領(lǐng)域還沒(méi)有完全統(tǒng)一,并且也有許多程度上的差異,目前,市面上有好幾種不同的可用的應(yīng)用程序接口,每種應(yīng)用程序接口都給出了一個(gè)到當(dāng)前的Palm OS應(yīng)用
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實(shí)現(xiàn)
- 網(wǎng)頁(yè)模板:關(guān)于jsp頁(yè)面使用jstl的異常分析
- JSP頁(yè)面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法
- JDBC連接Access數(shù)據(jù)庫(kù)的幾種方式介紹
- 網(wǎng)站圖片路徑的問(wèn)題:絕對(duì)路徑/虛擬路徑
- (jsp/html)網(wǎng)頁(yè)上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對(duì)路徑下的圖片解決方法
JSP教程Rss訂閱編程教程搜索
JSP教程推薦
猜你也喜歡看這些
- 解決jsp重復(fù)提交
- JAVA實(shí)現(xiàn)數(shù)據(jù)庫(kù)基本操作指南
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- JSP進(jìn)行數(shù)據(jù)庫(kù)連接的實(shí)例
- 如何使用Spring來(lái)管理Struts中的Action
- 揭秘JSP與XML編程原理及技巧
- java去除字符串空格幾種做法
- JSP動(dòng)態(tài)網(wǎng)站環(huán)境搭建的詳細(xì)步驟
- 用jsp實(shí)現(xiàn)SQLServe數(shù)據(jù)庫(kù)的備份和恢復(fù)
- JSP和Java Servlet的技術(shù)概述以及比較
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索在J2ME中使用Timer和TimerTask來(lái)實(shí)現(xiàn)多線(xiàn)程
- 教程說(shuō)明:
JSP教程-在J2ME中使用Timer和TimerTask來(lái)實(shí)現(xiàn)多線(xiàn)程
。