2012-06-06 166 views
2

這是我第一次寫多線程程序。 我懷疑我創建的多個線程將指向相同的運行方法並執行run()中寫入的任務。 但我想不同的線程來執行不同的任務 如1線程插入到數據庫中其他更新等 我的問題是如何創造不同的線程將執行不同的任務多線程執行不同任務

+2

問題是? –

+0

實現'java.lang.Runnable' –

回答

3

創建線程做不同的工作:

public class Job1Thread extends Thread { 

    @Override 
    public void run() { 
     // Do job 1 here 
    } 

} 

public class Job2Thread extends Thread { 

    @Override 
    public void run() { 
     // Do job 2 here 
    } 

} 

啓動線程,他們會爲你工作:

Job1Thread job1 = new Job1Thread(); 
Job2Thread job2 = new Job2Thread(); 

job1.start(); 
job2.start(); 
2

您可以創建實現Runnable不同的不同類別作業 - 僅用於開始

2

您可以根據您的條件(插入數據庫,更新等)運行run()方法。在初始化線程類時,在類構造函數中傳遞參數,該參數將定義此線程將爲您執行的任務。

0

您可以使用內部類此。如下所示

 class first implements Runnable 

{ 

     public void run(){ 
      System.out.println("hello by tobj"); 
      } 
      public static void main(String args[]){ 
      first obj=new first(); 
      Thread tobj =new Thread(obj); 
      tobj.start(); 
      Thread t2 =new Thread(obj) 
      { 
        public void run() 
        { 
        System.out.println("hello by t2"); 
        } 
      }; 
      Thread t = new Thread(obj) 
      { 
        public void run() 
        { 
        System.out.println("hello by t"); 
        } 
      }; 
      t.start(); 
      t2.start(); 

     } 
} 
+0

使用類的對象不是內部類所必需的,但它不會阻止你這樣做。 –

1

/*該程序創建三個不同的線程來執行三個不同的任務。線程-1打印A ... Z,線程2打印1 ... 100,線程3打印100-200。用於理解多線程的非常基本的程序,而不爲不同任務創建不同的類別*/

class ThreadingClass implements Runnable { 
    private Thread t; 
    private String threadName; 

    ThreadingClass(String name) { 
     threadName = name; 
     System.out.println("Creating " + threadName); 
    } 

    public void run() { 
     System.out.println("Running " + threadName); 
     if(threadName == "Thread-1"){ 
      this.printAlpha(); 
     } 
     else if(threadName == "Thread-2"){ 
      this.printOneToHundred(); 
     } 
     else{ 
      this.printHundredMore(); 
     } 
    } 
    public void printAlpha(){ 
     for(int i=65; i<=90; i++) 
     { 
      char x = (char)i; 
      System.out.println("RunnableDemo: " + threadName + ", " + x); 
     } 
    } 
    public void printOneToHundred(){ 
     for(int i=1; i<=100; i++) 
     { 

      System.out.println("RunnableDemo: " + threadName + ", " + i); 
     } 
    } 
    public void printHundredMore(){ 
     for(int i=100; i<=200; i++) 
     { 

      System.out.println("RunnableDemo: " + threadName + ", " + i); 
     } 
    } 

    public void start() { 
     System.out.println("Starting " + threadName); 
     if (t == null) { 
     t = new Thread (this); 
     t.start(); 
     t.setName(threadName); 
     } 
    } 
} 
public class MultiTasking { 

    public static void main(String args[]) { 
     ThreadingClass R1 = new ThreadingClass ("Thread-1"); 


     ThreadingClass R2 = new ThreadingClass ("Thread-2"); 


     ThreadingClass R3 = new ThreadingClass ("Thread-3"); 
     R1.start(); 
     R2.start(); 
     R3.start(); 

    } 
}