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 (将#修改为@)