是否有可能从多个线程填充List或任何其他数据?
我已经尝试过使用同步列表。
public class Main {
public static ArrayList<String> list =
Collections.synchronizedList(new ArrayList<String>());
public static void main(String[] args) {
MyRunnable r = new MyRunnable();
Thread t1 = new Thread(r);
t1.start();
for(String s : list)
System.out.println(s);
}
}
public class MyRunnable implements Runnable {
@Override
public void run() {
Main.list.add("testing some code");
}
}
答案 0 :(得分:3)
你有竞争条件。主程序在列表仍为空时打印列表。只有这样,线程才会工作并向其添加内容。
等待线程完成:
t1.join();
// now print
答案 1 :(得分:2)
在处理线程时,您需要使用java.util.concurrent
包中的集合。它们比同步集合更受欢迎,因为它们提供了额外的原子方法,例如putIfAbsent
用于映射。
但这只是理论,你能放一些代码吗?
更新:
您的问题来自在MyRunnable
完成之前完成主线程。你需要添加
t1.join()
这将告诉您的Main类等待直到MyRunnable
线程完成。