Эти потоки, запущенные из цикла, выполняются асинхронно? - PullRequest
0 голосов
/ 15 апреля 2019

Размер моих данных огромен, поэтому я подумал о том, чтобы разделить их на куски и использовать потоки для асинхронной обработки.Для простоты, скажем, у меня есть список и я связываю каждую запись с потоком, поэтому число потоков равно количеству элементов.Так как я новичок в потоках в Java, я не уверен, как потоки работают асинхронно.Вот упрощенный код для лучшего понимания.

class ThreadRunner extends Thread { 
  String threadName;
  String element;
  public MyThread (String threadName, String element) { 
    this.threadName = threadName;
    this.element = element;
  }

  public void run() { 
    System.out.println("Run: "+ threadName); 
    // some processing on the item
  } 
}


 class TestThread {
  public static void main (String arg[]) {
    List<String> mainList = new ArrayList<>();


    for (int x=0; x< mainList.size(); x++)
    {
        MyThread temp= new MyThread("Thread #" + x+1);
        temp.start();
        System.out.println("Started Thread:" + x+1);
    }
}

Этот код выполняет потоки асинхронным способом?

1 Ответ

0 голосов
/ 16 апреля 2019

Вместо того, чтобы создавать потоки самостоятельно, используйте ExecutorService и отправьте ему работу в виде Runnable s.

Каждая задача Runnable должна обрабатывать достаточно работы, чтобы оправдать издержки, связанные с порождением потоковно не так много работы, что вы недостаточно используете другие ядра.Другими словами, вы хотите правильно распределить нагрузку между вашими ядрами.Один из способов сделать это - равномерно распределить элементы по задачам, чтобы каждая задача обрабатывала примерно num_threads / mainList.size() элементов, и вы отправляете num_thread задач в ExecutorService.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...