微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java:可调用线程没有终止

如何解决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 举报,一经查实,本站将立刻删除。