j2me多線程(一) 線程的實現

來源:互聯網
上載者:User

一.線程和進程的簡介

 

   關於進程和線程的簡介可以參見:

   http://blog.csdn.net/feng131719/archive/2009/06/05/4244286.aspx

 

二.線程的實現形式

 

   多線程有兩種實現形式,通過定時執行也可以達到多線程的目的。下面就每一種實現做一下簡單介紹:

 

1.繼承Thread類(java.lang.Thread)

    

     建立一個繼承自Thread 類子類。但是必須覆蓋Thread 的 run() 函數來完成有用的工作。使用時並不直接調用此函數;而是必須調用 Thread 的 start() 函數,該函數再調用 run()。

 

例如:

class PrimeThread extends Thread {
         long minPrime;
         PrimeThread(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }

 

然後,下列代碼會建立並啟動一個線程:

 

     PrimeThread p = new PrimeThread(143);     p.start();
當執行start方法時候,將會自動運行run方法,但是執行start方法時候只做了一件事,
就是將線程轉化為可執行狀態,然後等待作業系統進行調度並運行,因此無法保證線程能立即啟動。
在JAVA中,Thread類實現了Runnable介面,因此run方法是通過實現介面Runnable中的抽象方法。
二、直接實現Runnable多線程介面(java.lang.Runnable)
線程介面Runnable中只有一個抽象方法run,通過實現Runnable介面中的方法的類即可建立出
有多線程特徵的對象,但該對象並無法使其啟動線程,需要作為參數並藉助Thread的
構造方法構造建立對象並調用start方法對線程進行啟動。
class PrimeRun implements Runnable {         long minPrime;         PrimeRun(long minPrime) {             this.minPrime = minPrime;         }          public void run() {             // compute primes larger than minPrime              . . .         }     }
 

然後,下列代碼會建立並啟動一個線程:

 

PrimeRun p = new PrimeRun(143); new Thread(p).start();

 

 

 

 

 

 

 

 

 

 

 

三、使用工作群組合實現多線程

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

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

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

 

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

 

    任務調用:

    Timer timer = new Timer();

    //3秒鐘後執行任務

    timer.schedule(new TimerTaskS(),3000);

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

    timer.schedule(new TimerTaskS(),3000,5000);

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

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

      public void commandAction(Command c, Displayable s) {
 if(c==do1Com){
  //建立實現介面線程
  new Thread(new RunnableSimple()).start();
 }
 else if(c==do2Com){
  //建立繼承Thread線程
        new ThreadSimple().start();
 }
     else{
       //建立任務線程
       new Timer().schedule(new TimerTaskS(),3000,20);
   }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.