#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...
вызова. Это будет намного проще для чтения.