在java中,动态创建时如何处理线程
我已经为每个文件创建了线程。下面给出了代码在java中,动态创建时如何处理线程,java,multithreading,Java,Multithreading,我已经为每个文件创建了线程。下面给出了代码 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(); } 列表
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();
}
列表是一个数组列表,包含文件名{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();
}
运行此代码时,我总是得到输出“文件名::test3.txt”
。
如何解决这个问题?制作一个线程列表怎么样?我认为,当您一直重新分配“线程t”时,您正在覆盖上一个线程,因此,只有最后一个线程仍然存在。做这样的事:
List<Thread> threadList = new ArrayList<Thread>();
for(String str : AList){
threadList.add(new Thread(new Filechange(str)));
threadList.get(threadList.size()-1).start();
}
List-threadList=new-ArrayList();
for(字符串str:AList){
添加(新线程(新文件更改(str));
get(threadList.size()-1.start();
}
您在发布代码时出错。请更正它发布的代码是否编译?你的主要方法在哪里?这不可能是你真正的代码(它不会编译)。请发布您的实际代码。您不能仅仅通过重新分配变量来“覆盖”线程。线程对象将一直保留,直到线程完成。我会将新创建的线程分配给一个局部变量,而不是threadList.get…
调用。它会更容易阅读。