Java中的多线程编程,最佳实践和代码

A_E*_*ric 0 java multithreading

我正在编写一个文件,可以在线拨打大量不同地点的电话(遗憾的是这是要求的一部分)

我的问题是这样的:

我们假设我有一个main方法,并想调用其他方法:

public static void main(String args[]){
    //how do I break stuff into threads here
     Thread nameThread1 = new(fileName.DoMethod1(x))
     Thread nameThread2 = new(fileName.DoMethod2(x))
     Thread nameThread3 = new(fileName.DoMethod3(x))
     Thread nameThread4 = new(fileName.DoMethod4(x))
     Thread nameThread5 = new(fileName.DoMethod5(x))
}



           //fileName.java
public static void doMethod1(object){
   //Do Method Stuff
}

public static void doMethod2(object){
   //Do Method Stuff
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一些关于如何实现它的指南,但我仍然对确切的方法感到困惑.

有人可以告诉我一些例子吗?谢谢!

Gra*_*ray 8

你不能在帖子中调用不同的方法.你可以做的是打电话给不同的班级:

public static void main(String args[]){
     Thread nameThread1 = new Thread(new Method1(x));
     nameThread1.start();
     Thread nameThread2 = new Thread(new Method2(x));
     nameThread2.start();
     Thread nameThread3 = new Thread(new Method3(x));
     nameThread3.start();
     Thread nameThread4 = new Thread(new Method4(x));
     nameThread4.start();
     Thread nameThread5 = new Thread(new Method5(x));
     nameThread5.start();
}

public class Method1 implements Runnable {
   private Object obj;
   public Method1(Object obj) {
       this.obj = obj;
   }
   //fileName.java
   public void run(){
      //Do Method Stuff
   }
}
Run Code Online (Sandbox Code Playgroud)

您应该始终考虑使用创建ExecutorService代码来管理这样的作业.例如:

// create a thread pool with 10 workers
ExecutorService threadPool = Executors.newCachedThreadPool();
threadPool.submit(new Method1(x));
threadPool.submit(new Method2(x));
...
// once we have submitted all jobs to the thread pool, it should be shutdown
threadPool.shutdown();
Run Code Online (Sandbox Code Playgroud)

如果你必须使用一个类,那么你可以启动一个Runnable使用开关或类似的东西:

public static void main(String args[]){
     Thread nameThread1 = new Thread(new Method(1, x));
     nameThread1.start();
     Thread nameThread2 = new Thread(new Method(2, x));
     nameThread2.start();
     ...
}
public class Method1 implements Runnable {
   private int which;
   private Object obj;
   public Method1(int which, Object obj) {
       this.which = which;
       this.obj = obj;
   }
   //fileName.java
   public void run(){
       switch(which) {
          case 1:
             doMethod1(obj);
             break;
          case 2:
             doMethod2(obj);
             break;
          ...
       }
    }
    private void doMethod1(Object obj){
       ...
    }
    private void doMethod2(Object obj){
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但执行者或单独的Runnable班级会更清洁.