[英]How can I call methods simultaneously in Java?
我需要为自己所在的类编写Java程序,但我需要能够一次执行6个方法。 我不知道该怎么做,但这只是我的一小部分:
public static void main(String[] args) {
method1();
method2();
method3();
method4();
method5();
method6();
}
这只是一次播放一种方法,而我一次需要它们。
使用多个线程,但是如果要从多个线程编辑相同的对象,则应该阅读并发性知识。
public static void main(String[] args) {
new Thread() {
public void run() {
method1();
}
}.start();
new Thread() {
public void run() {
method2();
}
}.start();
//etc
//or, as kingdamian42 pointed out, if you use java8, use this
new Thread(() -> method1()).start();
new Thread(() -> method2()).start();
}
正如@ kevin-cruijssen所说,您可以使用类似以下的内容:
public static void main(String[] args) {
Arrays.asList(new Thread(() -> method1()), new Thread(() -> method2()))
.parallelStream().forEach(x -> x.start());
}
但是您不能保证执行顺序。
如果您的计算机具有6个CPU,则可以获取有关如何执行此操作的完整示例。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class demo {
private int count1 = 0;
private int count2 = 0;
private int count3 = 0;
private int count4 = 0;
private int count5 = 0;
private int count6 = 0;
int countA() {
for (int i = 0; i < 1000; i++) {
count1++;
}
System.out.println(count1);
return count1;
}
int countB() {
for (int i = 0; i < 1000; i++) {
count2++;
}
System.out.println(count2);
return count2;
}
int countC() {
for (int i = 0; i < 1000; i++) {
count3++;
}
System.out.println(count3);
return count3;
}
int countD() {
for (int i = 0; i < 1000; i++) {
count4++;
}
System.out.println(count4);
return count4;
}
int countE() {
for (int i = 0; i < 1000; i++) {
count5++;
}
System.out.println(count5);
return count5;
}
int countF() {
for (int i = 0; i < 1000; i++) {
count6++;
}
System.out.println(count6);
return count6;
}
public void execute() {
ExecutorService executorService = Executors.newFixedThreadPool(6);
// method reference introduced in Java 8
executorService.submit(this::countA);
executorService.submit(this::countB);
executorService.submit(this::countC);
executorService.submit(this::countD);
executorService.submit(this::countE);
executorService.submit(this::countF);
// close executorService
executorService.shutdown();
}
public static void main(String[] args) {
new demo().execute();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.