Пул потоков для создания заданного количества потоков в секунду - PullRequest
0 голосов
/ 08 марта 2019

Я хочу вызывать метод 10 раз в секунду в отдельных потоках, используя пул потоков. Что было бы хорошим способом сделать это?

Ответы [ 3 ]

2 голосов
/ 08 марта 2019

вызов метода 10 раз в секунду в отдельных потоках с использованием потока бассейн

Определить этот метод

Предположим, что вы хотите выполнить метод класса myMethod() из MyClass, как показано ниже.

class MyClass{
 static void myMethod(){
   // some task
 }
}

Определите Runnable , который выполняет этот метод 10 раз в секунду

Runnable runnable = () ->{
  for(int i=0; i<10; i++){
   try{
     Thread.sleep(1000);
     MyClass.myMethod();
   }catch{}
  }
};

Инициализация пула потоков

int threadCount = 10; //whatever number of threads you wish
ExecutorService executor = Executors.newFixedThreadPool(threadCount);

Начало выполнения

executor.execute(runnable);
1 голос
/ 08 марта 2019

Вам необходимо использовать Executor Framework для поддержки потока (вы можете использовать Fixed Thread Pool) и вызывать метод параллельно, используя эти потоки.

ExecutorService executor = Executors.newFixedThreadPool (threadCount);

executor.submit (задача);

0 голосов
/ 08 марта 2019

Если вам просто нужно 10 параллельных потоков, используйте ExecutorService с фиксированным пулом потоков.

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool-int-

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

Не ясно, что вам на самом деле нужно.

...