我正在编写一个文件,该文件对在线不同位置进行大量调用(遗憾的是,这是要求的一部分)
我的问题是这样的:
假设我有一个 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/