【发布时间】:2016-11-23 15:05:51
【问题描述】:
我有 2 节课。 第一类是控制器。当您点击enter按钮时,在集合中添加许多不同线程中的对象,并在循环10次迭代后退出时将此集合呈现为控制器的类。
public class Controller {
private int count = 3;
@FXML
private Button enter;
@FXML
public void getData() throws IOException{
//Create collection
List<String> synchList = Collections.synchronizedList(new ArrayList<String>());
ExecutorService executor = Executors.newFixedThreadPool(count);
for (int i=0; i<10; i++) {
Runnable myThread= new MyThread(synchList);
executor.execute(myThread);
}
executor.shutdown();
System.out.println(synchList); //Show collection
}
第二类是MyThread。它执行一些任务。接收到的对象提前存储在collection中(例如,延迟添加3个对象,模拟一些任务的性能)
public class MyThread implements Runnable{
public List<String> list = null;
public MyThread(List<String> list){
this.list = list;
}
@Override
public void run() {
try {
Thread.sleep(2000);
list.add("Object2");
Thread.sleep(2000);
list.add("Object3");
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在代码执行结束时,我得到一个空列表。请告诉我我做错了什么以及如何解决这种情况?谢谢!
【问题讨论】:
-
不是重复的,因为这不适用于我的问题。
标签: java multithreading javafx collections