`

J2ME中实现多线程技术总结

阅读更多
在操作系统级别上软件的运行一般都是以进程为单位,而在每个进程的运行过程中允许同时并发执行多个不同线程,这就使得一个程序能同时执行不同的操作。使用多线程的目的是为了最大限度地利用计算机CPU资源。JAVA程序字节码最终是在JVM虚拟机下运行的,同一虚拟机进程中的不同操作都是通过多线程来运行的。在JAVA虚拟机中,线程常用有单线程和多线程,单线程指程序执行过程只是一个有效操作的序列,不同操作都有着明确的先后顺序;而多线程允许同时进行着不同的操作,这些不同的操作同时并发进行着,并由CPU时钟频率根据不同的调度方式对他们进行执行调度。
    在JAVA语言中提供了丰富的多线程操纵接口,提供了各类不同的线程实现方法供我们选择,功能非常强大。在手机软件设计中,由于同样需要执行网络连接(基于HTTP的高级Internet协议通讯)、UI调度等待、UI显示幻化、游戏控制等操作需要通过后台的数据运算或UI不断更新等操作。因此在J2ME 中,KVM虚拟机也提供了功能强大的多线程API,使我们同样能在J2ME中实现线程的并发运算。
    在J2ME中,主要有以下三种方法实现多线程。
    一、继承Thread类(java.lang.Thread)
    通过编写线程类继承Thread类并重写Thread类中的run()方法实现线程,当线程对象被运行时候将会自动执行run方法中的实体内容,从而开辟一个单独的线程并运行起来。
         如:
Java代码

   1. public class ThreadSimple extends Thread{ 
   2.                   public ThreadSimple() 
   3.                   { 
   4.                         //constructor 
   5.                    } 
   6.                   public void run() 
   7.                   { 
   8.                         //run code entity 
   9.                   } 
  10.          } 

public class ThreadSimple extends Thread{
                  public ThreadSimple()
                  {
                        //constructor
                   }
                  public void run()
                  {
                        //run code entity
                  }
         }


    线程实例使用,直接创建对象并调用start()方法即可运行线程。
    new ThreadSimple()。start();当执行start方法时候,将会自动运行run方法,但是执行start方法时候只做了一件事,就是将线程转化为可执行状态,然后等待操作系统进行调度并运行,因此无法保证线程能立即启动。在JAVA中,Thread类实现了Runnable接口,因此 run方法是通过实现接口Runnable中的抽象方法。
    二、直接实现Runnable多线程接口(java.lang.Runnable)
    线程接口Runnable中只有一个抽象方法run,通过实现Runnable接口中的方法的类即可创建出有多线程特征的对象,但该对象并无法使其启动线程,需要作为参数并借助Thread的构造方法构造创建对象并调用start方法对线程进行启动。
         如:
Java代码

   1. public class RunnablSimple implements Runnable{ 
   2.                   public RunnableSimple() 
   3.                   { 
   4.                          //constructor 
   5.                   } 
   6.                   public void run(){ 
   7.                         //run code entity 
   8.                } 
   9.       } 

public class RunnablSimple implements Runnable{
                  public RunnableSimple()
                  {
                         //constructor
                  }
                  public void run(){
                        //run code entity
               }
      }


    实现类型的对象使用:
  
Java代码

   1. RunnableSimple rs = new RunnableSimple(); 
   2.     new Thread(rs).start(); 

RunnableSimple rs = new RunnableSimple();
    new Thread(rs).start();


    由此可见,以上两种方法都是通过Thread的start来启动线程的,实际上所有的线程操作都是封装在Thread这个类中,由Thread对象调用各种接口来控制线程。
    J2ME中线程中主要方法:void setPriority(int newPriority),设置线程优先级,在操作系统中线程的调度是不确定性的,可以通过该方法设置相应线程的优先级别。
    static void sleep(long millis) ,线程中静态方法,用于让线程进入休眠状态,执行该方法将会让线程在指定时间millis毫秒内休眠。
    void start(),使现在进入可执行状态。
    void run() ,线程执行主体。
    void join(),等待该线程终止。
    boolean isAlive(),用于判断线程是否出于Alive状态。
    static void yield() ,尽量让其他线程先执行。
  三、使用任务组合实现多线程
    在J2ME中,同样具有JAVA中的任务处理组合类,他们分别为Timer和TimerTask,可以使用他们实现多线程,简单说就是定时实现任务。
    Timer是JAVA中的一个定时器,可以实现在某一时间做某件事或者在某一时间段做某些事,分别通过方法schedule(TimerTask tt,long millis)和schedule(TimerTask tt,long start,long off)。
    TimerTask是一个任务类,通过继承该类并覆盖方法run即可创建一个任务。
      如:
Java代码

   1. public class TimerTaskS extends TimerTask{ 
   2.                public TimerTaskS(){ 
   3.                      //constructor 
   4.                } 
   5.                public void run(){ 
   6.                     //run code entity 
   7.          } 
   8.       } 

public class TimerTaskS extends TimerTask{
               public TimerTaskS(){
                     //constructor
               }
               public void run(){
                    //run code entity
         }
      }


    任务调用:
 
Java代码

   1. Timer timer = new Timer(); 
   2.    //3秒钟后执行任务 
   3.    timer.schedule(new TimerTaskS(),3000); 
   4.    //3秒钟后执行任务并且之后每5秒钟执行一次 
   5.    timer.schedule(new TimerTaskS(),3000,5000); 

Timer timer = new Timer();
    //3秒钟后执行任务
    timer.schedule(new TimerTaskS(),3000);
    //3秒钟后执行任务并且之后每5秒钟执行一次
    timer.schedule(new TimerTaskS(),3000,5000);


    有此可见在使用计时任务可以达到实现线程的效果,分别执行不同的并发操作,通过Timer类对象来操作TimerTask对象,通过schedule方法来计时执行任务,在结束任务的时候,通常使用cancel()来实现。
    通常情况下,在J2ME软件中我们通过手机按键来触发一系列相应的操作,在程序响应处理过程中较多会涉及网络操作、数据存储等相对消耗时间和资源的操作,而这些操作往往需要一定的时间才能完成,因此在处理按键响应过程中通常我们需要建立线程处理,避免程序出现死机现象。
    
Java代码

   1. public void commandAction(Command c, Displayable s) { 
   2.  if(c==do1Com){ 
   3.   //创建实现接口线程 
   4.   new Thread(new RunnableSimple()).start(); 
   5.  } 
   6.  else if(c==do2Com){ 
   7.   //创建继承Thread线程 
   8.         new ThreadSimple().start(); 
   9.  } 
  10.      else{ 
  11.        //创建任务线程 
  12.        new Timer().schedule(new TimerTaskS(),3000,20); 
  13.    } 
  14. } 
分享到:
评论

相关推荐

    在J2ME上实现平滑的资源加载进度条

    2. **多线程处理**:将整个加载过程放入后台线程中进行,避免阻塞UI线程,从而确保界面的响应性。 3. **进度更新**:设计一个专门的类用于更新进度条的状态,并通过循环不断检查资源的加载情况,及时更新进度条。 #...

    J2ME高级UI总结

    在J2ME中,UI(用户界面)的设计和实现对于提供良好的用户体验至关重要。本文将深入探讨J2ME中的高级UI设计技巧、框架和实践。 一、触摸屏操作 在现代移动设备中,触摸屏已经成为主流的交互方式。在J2ME中处理触摸...

    动画线程双缓冲(j2me)

    总结来说,"动画线程双缓冲"是J2ME开发中提高图形性能的重要手段,结合多线程编程和双缓冲技术,能够实现高效且平滑的动画,为用户带来更好的交互体验。通过对提供的源程序进行深入研究,开发者可以进一步提升自己的...

    j2me_plane.rar_j2me_j2me 飞机_j2me 飞机 游戏_飞机游戏

    本篇文章将深入探讨如何利用J2ME技术开发一款简单的飞机游戏,以此帮助初学者理解J2ME编程的基本原理和技巧。 首先,我们要了解J2ME的基础架构。J2ME包括配置(Configurations)、配置文件(Profiles)和功能包...

    j2me中文教程

    本教程将深入探讨J2ME的基础概念、开发环境、应用模型以及实际开发过程中的关键技术和技巧。 1. J2ME概述: J2ME提供了一个灵活的框架,使开发者能够为各种资源受限的设备编写可移植的应用程序。它由一组配置...

    j2me游戏.rar

    总结,J2ME游戏开发涉及多个层面,从理解平台规范到实际编码和调试,都需要开发者具备扎实的Java基础和对移动设备特性的理解。"j2me游戏.rar"中的游戏可能涵盖了上述各种技术,是学习和研究J2ME游戏开发的宝贵资源。

    非常好的关于j2me学习概要

    4. **多线程**:理解并能运用多线程编程技术。 #### 不需深入掌握的Java知识 对于J2ME而言,并非所有的Java知识都是必需的。例如,下面这些内容在J2ME开发中并不常用: 1. **JDK工具**:像javac和java这样的编译...

    J2ME游戏开发

    - **多线程编程**:讨论了如何在J2ME环境中有效地使用多线程来提高游戏性能。 - **网络通信**:介绍了如何利用J2ME中的网络连接功能实现在线游戏特性。 - **安全性与加密**:探讨了如何保护游戏数据的安全性,防止...

    j2me中星星图片的各种处理

    总结来说,"j2me中星星图片的各种处理"涵盖了J2ME中的图片旋转、数组操作、线程控制以及`Sprite`的使用等多个方面。通过这些技术,开发者可以在移动设备上创建出具有动态效果和交互性的游戏或应用,为用户带来更丰富...

    整合j2me技术效果

    总结,J2ME技术是为嵌入式设备提供Java应用程序开发的基石,通过理解其架构、界面优化、控件开发以及与其他技术的整合,开发者可以创建出适应各种资源受限设备的高效且具有吸引力的应用程序。对于移动设备开发者而言...

    j2me --实现拍照程序

    总结,J2ME实现拍照程序涉及到对MIDP和CLDC的理解,以及熟练使用Camera API。通过掌握这些知识,开发者可以创建出跨平台的移动拍照应用,满足不同设备的需求。不过需要注意,随着移动平台的发展,现代智能手机更多地...

    J2ME中文教程J2ME中文教程J2ME中文教程

    2. **Multithreading**:J2ME支持多线程编程,可以同时执行多个任务。 3. **Graphics and Animation**:使用Graphics类进行绘图操作,创建动画效果。 4. **Game Programming**:J2ME非常适合游戏开发,利用Canvas类...

    J2ME平台的RSSReader

    总结来说,J2ME平台的RSSReader是一个综合运用了网络通信、XML解析、数据存储、用户界面设计以及多线程和错误处理技术的典型示例。它展示了如何在资源有限的环境中构建功能丰富的移动应用。通过深入理解这些技术,...

    j2me手机游戏开发

    多线程技术在手机游戏中至关重要,因为它允许游戏在执行复杂任务时保持用户界面的响应性,例如在游戏过程中播放背景音乐或处理网络通信。 论文中的“猜数字游戏”是基于J2ME平台实现的,游戏设计包含了多个功能模块...

    QQ聊天+j2me+java

    这可能涉及到多线程编程,确保多个用户可以同时发送和接收消息。 5. 注册与登录:用户需要注册账号才能使用聊天服务。J2ME客户端需要有用户输入用户名和密码的界面,并通过安全的HTTP或HTTPS协议将这些信息发送到...

    j2me教程

    - 进一步地,可以探索更高级的主题,如网络通信、多线程编程等,以构建更复杂的功能和提高游戏性能。 以上内容涵盖了从 J2ME 的概念介绍到具体示例程序的详细解析,旨在帮助初学者快速入门并掌握使用 J2ME 进行移动...

    网络扑克 j2me 程序

    总结起来,网络扑克j2ME程序的开发涵盖了网络编程、用户界面设计、多线程管理、数据结构与算法运用、游戏逻辑实现、安全性保障、资源管理以及性能优化等多个方面,体现了j2ME平台在移动游戏开发中的应用潜力。...

    j2me手要移动开发技术角色扮演游戏.rar

    J2ME的线程模型允许开发者创建多个并发执行的任务,例如游戏主循环和用户输入处理。同时,使用GameState管理器可以有效地组织游戏的不同状态,如菜单、战斗、探索等。 4. **数据存储**: 移动设备的存储空间有限,...

Global site tag (gtag.js) - Google Analytics