2012-06-06 172 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(); 

    } 
}