问题描述
我正在使用一个小型管理系统,该系统从文件中读取数据。我希望它在其他线程中这样做。我编写了一个类,该类将为我处理所有Thread语法,这样我就可以从main调用一些加载或保存函数。 我的Thread类看起来像这样:
public class SaveLoaderThread implements Callable<List<Item>> {
private List<Item> items;
private DataManagement management;
private boolean modeFlag = false;
Future<List<Item>> result;
public SaveLoaderThread(SaveLoader saveLoader,List<Item> items) {
this.items = items;
management = new DataManagement(saveLoader);
}
//Called by the Executor with submit()
public List<Item> call() {
if(modeFlag)
return management.loadItems();
else
management.saveItems(items);
return items;
}
public void loadItems() {
modeFlag = true;
start();
}
public void saveItems() {
modeFlag = false;
start();
}
public List<Item> getItems() {
try {
List<Item> res = result.get();
if(res != null)
items = res;
return items;
} catch (InterruptedException e) {
e.printstacktrace();
} catch (ExecutionException e) {
e.printstacktrace();
}
return items;
}
// Starts new Thread With Executor Object as Runner; result is a Future that stores a reference to
// the List that is about to be modified
private void start() {
ExecutorService executor = Executors.newCachedThreadPool();
result = executor.submit(this);
}
public void setSaveLoader(SaveLoader saveLoader) {
management = new DataManagement(saveLoader);
}
}
构造函数正在传递一个List,该List应该保存或填充有已加载的项目。还有我的类SaveLoader的一个实例,该实例确定以哪种方式存储数据(由DataManagement类管理)。
我的主干只是调用给定的方法来加载项目,然后等待结果(我知道在此期间它什么也没做,但是应该在loadItems()和getItems()之间插入一些代码。
public class LibraryTestingMain {
public static void main(String[] args) {
List<Item> testList = new ArrayList<>();
SaveLoaderThread data = new SaveLoaderThread(new TextSaveLoader(),testList);
data.loadItems();
//Something to do in the meantime
testList = data.getItems();
for (Item i : testList) {
System.out.println(i.toString());
}
data.saveItems();
}
}
它成功地加载并保存了这些项目,据我从TextSaveLoader和for循环发送的相关消息中知道,该项目可以打印加载的项目。 但是这样做并不会终止。为什么不?哪里出错了?
感谢您的帮助,对于冗长的问题深表歉意。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)