в Java, как обрабатывать потоки при динамическом создании

#java #multithreading

#java #многопоточность

Вопрос:

Я создал потоки для каждого файла.код приведен ниже.

AList — это список массивов, содержащий имя файла {test1.txt,test2.txt,test3.txt}

 for(String str : AList){

  thread t = new Thread(new Filechange(str));
  t.start();

  }
  

Класс Filechange приведен ниже.

 public class C implements Runnable {

  private String tmp;


  public Filechange(String strg) {
   this.tmp = strg;
  }

  public void run() {

  system.out.println("File Name ::" tmp);

  } t.sleep(1000);
   t.run();


  }
  

При запуске этого кода я всегда получаю выходные данные "File Name ::test3.txt" .
Как решить эту проблему?

Комментарии:

1. Вы допустили ошибку при публикации кода. пожалуйста, исправьте это

2. Компилируется ли опубликованный код? И где ваш основной метод?

3. Это не может быть ваш реальный код (он не будет компилироваться). Пожалуйста, опубликуйте свой фактический код.

Ответ №1:

Как насчет создания списка потоков или чего-то в этом роде? Я думаю, что когда вы постоянно переназначаете «поток t», вы перезаписываете предыдущий поток, таким образом, сохраняется только последний поток. Сделайте что-нибудь вроде этого:

 List<Thread> threadList = new ArrayList<Thread>();
for(String str : AList){

  threadList.add(new Thread(new Filechange(str)));
  threadList.get(threadList.size()-1).start();

}
  

Комментарии:

1. Вы не можете «перезаписать» поток, просто переназначив переменную. Объект Thread остается до завершения потока.

2. Я бы назначил вновь созданный поток локальной переменной вместо threadList.get... вызова. Это будет намного проще для чтения.