我在Java应用程序中使用SwingWorker来防止GUI冻结。
应用程序使用10%CPU并正常响应,但是一旦我在循环中添加ArrayList.add(),GUI就会冻结,应用程序使用100%CPU。
class TestWorker extends SwingWorker<Integer, Integer> {
@Override
protected Integer doInBackground() throws Exception {
ArrayList arr_1 = new ArrayList<>();
ArrayList arr_2 = new ArrayList<>();
for(int i = 0; i < 999999999; i++) {
arr_1.add(2);
arr_2.add(4);
}
return null;
}
}
new TestWorker().execute();
为什么会这样?如果我只是在循环中做很多计算或创建对象,GUI就不会冻结,这似乎只能使用ArrayList.add()来实现。