如何解决Java:可调用线程没有终止
我正在使用一个小型管理系统,该系统从文件中读取数据。我希望它在其他线程中这样做。我编写了一个类,该类将为我处理所有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 举报,一经查实,本站将立刻删除。