java - java 中的多线程编程、最佳实践和代码

标签 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
}

我已经阅读了一些有关如何实现它的指南,但我仍然对执行此操作的确切方法感到困惑。

如果可能的话,有人可以给我举一些例子吗?谢谢!

最佳答案

您不能像您的帖子中那样调用不同的方法。你可以做的是调用不同的类:

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
   }
}

您应该始终考虑使用创建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();

如果您必须使用一个类,那么您可以启动一个使用开关或其他东西的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){
       ...
    }
}

但是执行器或单独的 Runnable 类会更干净。

关于java - java 中的多线程编程、最佳实践和代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10855679/

相关文章:

java - @PersistenceContext 如何保证线程安全?

java - 如何在 Java 查询中使用 SQL 提示

python - 守护线程启动软件不会死

c# - Thread.CurrentThread 是否总是返回相同的实例?

c++ - OpenMP 的扩展不佳(缓存争用?)

c# - WebClient 能够执行多个请求

java - 用一串字母创建一棵平衡二叉树

java - 发送包含对象和数组的对象的 JSON 主体时设置 @RequestBody

c++ - 多线程算法工作得更慢

Java 类 : how to check for compatibility to avoid classloading/compatibility issues at runtime