Хамидилло Мамытов Asked:2020-12-18 17:30:54 +0000 UTC2020-12-18 17:30:54 +0000 UTC 2020-12-18 17:30:54 +0000 UTC 如何同时运行一个类的所有方法? 772 为什么这一切?我有一个类需要多次执行三个方法,这些方法一个一个执行,我想如果你同时运行它们,那么这应该会增加程序执行的速度,因为它工作得非常慢。(同一个类的所有方法,每个方法单独在自己的线程中) java 2 个回答 Voted Best Answer Mike 2020-12-18T17:40:47Z2020-12-18T17:40:47Z 例如,您可以这样: ExampleClass exampleClass = new ExampleClass(); for (int i = 0; i < 100; i++) { new Thread(exampleClass::method1).start(); new Thread(exampleClass::method2).start(); new Thread(exampleClass::method3).start(); } Artem Konovalov 2020-12-18T20:02:38Z2020-12-18T20:02:38Z @Mikhail Ketov 建议的选项不错。但是有一个警告,创建线程不是即时操作。这需要时间,当为下一个方法创建线程时,另一个线程可能已经在执行它的工作了。 如果你想实现真正的并发,那么你应该使用java.util.concurrent.CyclicBarrier. private static class Together { private final CyclicBarrier barrier; private Together(int threadCount) { this.barrier = new CyclicBarrier(threadCount); } private void invoke(Runnable action) { new Thread( () -> { try { barrier.await(); } catch (Exception e) { e.printStackTrace(); } action.run(); }).start(); } } 并执行如下操作: Together together = new Together(3); together.invoke(object::method1); together.invoke(object::method2); together.invoke(object::method3); 这里发生了什么?创建线程时,它不会继续执行,而是阻塞 for barrier,并等待所有线程(在本例中为 3 个)初始化。并且只有当最后一个线程调用该方法时,await()它们才会全部唤醒并继续同时执行
例如,您可以这样:
@Mikhail Ketov 建议的选项不错。但是有一个警告,创建线程不是即时操作。这需要时间,当为下一个方法创建线程时,另一个线程可能已经在执行它的工作了。
如果你想实现真正的并发,那么你应该使用
java.util.concurrent.CyclicBarrier.并执行如下操作:
这里发生了什么?创建线程时,它不会继续执行,而是阻塞 for
barrier,并等待所有线程(在本例中为 3 个)初始化。并且只有当最后一个线程调用该方法时,await()它们才会全部唤醒并继续同时执行