熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

J2ME中實現多線程技術總結

2013-11-23 19:46:29  來源: Java高級技術 

  我們知道在操作系統級別上軟件的運行一般都是以進程為單位而在每個進程的運行過程中允許同時並發執行多個不同線程這就使得一個程序能同時執行不同的操作使用多線程的目的是為了最大限度地利用計算機CPU資源JAVA程序字節碼最終是在JVM虛擬機下運行的同一虛擬機進程中的不同操作都是通過多線程來運行的在JAVA虛擬機中線程常用有單線程和多線程單線程指程序執行過程只是一個有效操作的序列不同操作都有著明確的先後順序而多線程允許同時進行著不同的操作這些不同的操作同時並發進行著並由CPU時鐘頻率根據不同的調度方式對他們進行執行調度

  在JAVA語言中提供了豐富的多線程操縱接口提供了各類不同的線程實現方法供我們選擇功能非常強大在手機軟件設計中由於同樣需要執行網絡連接(基於HTTP的高級Internet協議通訊)UI調度等待UI顯示幻化游戲控制等操作需要通過後台的數據運算或UI不斷更新等操作因此在JME中KVM虛擬機也提供了功能強大的多線程API使我們同樣能在JME中實現線程的並發運算

  在JME中主要有以下三種方法實現多線程

  繼承Thread類(javalangThread)

  通過編寫線程類繼承Thread類並重寫Thread類中的run()方法實現線程當線程對象被運行時候將會自動執行run方法中的實體內容從而開辟一個單獨的線程並運行起來

            如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多線程接口(javalangRunnable)

  線程接口Runnable中只有一個抽象方法run通過實現Runnable接口中的方法的類即可創建出有多線程特征的對象但該對象並無法使其啟動線程需要作為參數並借助Thread的構造方法構造創建對象並調用start方法對線程進行啟動

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

  實現類型的對象使用

  RunnableSimple rs = new RunnableSimple()

  new Thread(rs)start()

  由此可見以上兩種方法都是通過Thread的start來啟動線程的實際上所有的線程操作都是封裝在Thread這個類中由Thread對象調用各種接口來控制線程

  JME中線程中主要方法void setPriority(int newPriority)設置線程優先級在操作系統中線程的調度是不確定性的可以通過該方法設置相應線程的優先級別

  static void sleep(long millis) 線程中靜態方法用於讓線程進入休眠狀態執行該方法將會讓線程在指定時間millis毫秒內休眠

  void start()使現在進入可執行狀態

  void run() 線程執行主體

  void join()等待該線程終止

  boolean isAlive()用於判斷線程是否出於Alive狀態

  static void yield() 盡量讓其他線程先執行

  使用任務組合實現多線程

  在JME中同樣具有JAVA中的任務處理組合類他們分別為Timer和TimerTask可以使用他們實現多線程簡單說就是定時實現任務

  Timer是JAVA中的一個定時器可以實現在某一時間做某件事或者在某一時間段做某些事分別通過方法schedule(TimerTask ttlong millis)和schedule(TimerTask ttlong startlong off)

  TimerTask是一個任務類通過繼承該類並覆蓋方法run即可創建一個任務

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

  任務調用

  Timer timer = new Timer()

  //秒鐘後執行任務

  timerschedule(new TimerTaskS()

  //秒鐘後執行任務並且之後每秒鐘執行一次

  timerschedule(new TimerTaskS()

  有此可見在使用計時任務可以達到實現線程的效果分別執行不同的並發操作通過Timer類對象來操作TimerTask對象通過schedule方法來計時執行任務在結束任務的時候通常使用cancel()來實現

  通常情況下在JME軟件中我們通過手機按鍵來觸發一系列相應的操作在程序響應處理過程中較多會涉及網絡操作數據存儲等相對消耗時間和資源的操作而這些操作往往需要一定的時間才能完成因此在處理按鍵響應過程中通常我們需要建立線程處理避免程序出現死機現象

         public void commandAction(Command c Displayable s) {
 if(c==doCom){
  //創建實現接口線程
  new Thread(new RunnableSimple())start()
 }
 else if(c==doCom){
  //創建繼承Thread線程
        new ThreadSimple()start();
 }
     else{
       //創建任務線程
       new Timer()schedule(new TimerTaskS());
   }
}


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27435.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.