繁体   English   中英

如何在Java中同时调用方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM