2014-08-19 2 views
1

Мне нужно сделать программу в Java для класса, в котором я есть, но мне нужно сделать сразу шесть методов. Я понятия не имею, как идти об этом, но вот маленький кусочек того, что у меня есть:Как я могу вызвать методы одновременно в Java?

public static void main(String[] args) { 
    method1(); 
    method2(); 
    method3(); 
    method4(); 
    method5(); 
    method6(); 
} 

Это просто играет методов по одному, и я их сразу.

+8

Read: [Concurrency] (http://docs.oracle.com/javase/tutorial/essential/concurrency/) – Reimeus

+0

google java threads –

+0

Вы можете использовать потоки, чтобы эффективно путать тот, который выполняется первым, и разрешить индивидуальный метод «затормозить», не задерживая выполнение других методов, но если у вас нет шестипроцессорного или лучшего многопроцессора, они никогда не будут выполнять «все сразу» (если даже тогда). –

ответ

8

Используйте несколько потоков, хотя вы должны прочитать параллелизм, если вы собираетесь редактировать одни и те же объекты из нескольких потоков.

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(); 
} 
+2

Также проще в java 8 ... new Thread (() -> method1()) .start(); – kingdamian42

+0

Я бы предложил сначала создать все «Threads» и использовать '.start();' для каждого из них. Несмотря на то, что для создания «Thread» -инструментов время почти игнорируется, все равно требуется несколько наносекунд, поэтому они не будут запускаться одновременно. (Хотя запуск их в одно и то же время в любом случае невозможно, если у вас нет четырехъядерного процессора и не может каким-либо образом его контролировать в коде Java. X12) –

+2

@KevinCruijssen Это не имеет значения, это полностью зависит от планировщика, который поток запускается когда. – stealthjong

1

Как @ Кевин-cruijssen сказал, что вы можете использовать что-то вроде этого:

public static void main(String[] args) { 
    Arrays.asList(new Thread(() -> method1()), new Thread(() -> method2())) 
     .parallelStream().forEach(x -> x.start()); 
} 

Но у вас нет гарантии на порядке выполнения.

Смежные вопросы