2015-04-29 4 views
-1

Я новичок в Java. У меня есть метод functionX(List<Object>), который вызывается в functionY несколько раз.Как использовать многопоточность Java для нескольких методов в одном классе?

class A { 
    void functionX(List<Object>){ 
    ... 
    } 
    Void functionY { 
     while(condition) { 
      functionX(); 
     } 
    } 
} 

У меня есть другой class B где я звоню метод functionY в Class A.

Class B { 
    main() { 
     A instance = new A(); 
     instance.functionY(); 
} 

Теперь я хочу использовать многопоточность для выполнения метода functionX для каждого элемента в List<Object>. Я смущен, как это сделать. Любая помощь оценивается.

+2

Я рекомендую начать с официальной [Java Учебник по параллельности ] (http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html). Вам нужно понять эти концепции, поскольку они не так просты. –

+0

Ваш класс A должен реализовать интерфейс Runnable. См. Http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html, а затем проверьте: http://docs.oracle.com/javase/7/docs/api/java /lang/Thread.html – JFPicard

+1

«... использовать многопоточность для выполнения метода ...» Неясно, что вы просите. Я второй, что сказал Хейн Блод: время, чтобы прочитать некоторые уроки. –

ответ

1

@ mohan.t, в вашем q. вы попросили параллельную обработку элементов списка.

в описании проблемы, вы не указали, что он делает - так что я собираюсь сделать его общим.

class A { 
    void functionX(List<YourClass> myList){ 
     ExecutorService exs = Executors.newFixedThreadPool("expected size of list"); 
     for(Runnable r : myList){ 
      exs. submit(r); 
     } 
    exs.shutdown(); 

    } 
    Void functionY { 
     while(condition) { 
      functionX(); 
     } 
    } 
} 

это будет запускать все элементы параллельно («ожидаемого размера списка» - в то время - это ваша степень parallelism-- сколько ядра и нить/ядер у вас есть на вашем компьютере?) и как только все выполнение будет завершено, обслуживание будет завершено. это самое простое решение ...

Обратите внимание, что я использовал List<Runnable>, ваши элементы должны реализовать интерфейс Runnable, чтобы он мог запускаться в потоке.

Class YourClass implements Runnable{ 

    @override 
     public void run(){ 
      ... 
      // your logic goes here 
     } 
} 

Проверить, как создавать и запускать потоки в java и просматривать структуру Executor.

Если эти объекты не являются модифицируемые, то есть, если вы не можете изменить его реализовать runnable-- пост обратно - мы можем рассмотреть более сложные варианты ..

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