有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java多线程不一致性

我知道这就是所谓的manieth多线程。我读了很多。我读过基本的线程教程。但没有人回答我的问题,我有几个问题

问题1:

在创建实现Runnable接口的类时,我必须实现Run()方法

如果我创建一个新线程,比如:

Thread t1 = new Thread();

它在调用start方法时执行run方法,对吗

现在我希望我的线程t1在线程中执行另一个方法

我面临以下情况:

    tblGames = new JTable(new GamesTableModel(mainController.retrieveGames()));

我认为这是一个糟糕的编码。 我认为最好是像这样实例化一个列表变量:

List<Game> games = mainController.retrieveGames();

现在的情况是,当加载表内容时(使用JPA),GUI会冻结 所以我想在另一个线程中运行它。我使用GamesTableModel来处理JTable的列等,因此我在新GamesTableModel的构造函数中传递了一个列表

我在哪里创建一个新线程,我在MainController类中创建它,如果是

(方法如下所示:)

    public List<Game> retrieveGames(){
    List<Game> games = gameRepository.getGames();

    return games;
}

我将如何运行该方法的内容,或者在另一个线程中运行整个方法,实际上,最好将整个MainController放在一个新线程中,这样就永远不会冻结UI,或者这是不可取的

如果可行,我需要在UI中创建一个线程吗?那么,是谁引出了这个问题:我将如何竞选

MainController mainController = new MainController();

用新的思路

我以前从未在程序中正确地实现过线程,因此我提出了一些新问题

我对接口中的run方法主要关心的是,内容是否适用于实现类权限中的所有线程

我需要单独的线程来执行几种不同的方法

现在的主要问题是使用一个新线程来填充JTable的内容

很抱歉读了这么长时间。谢谢你还在这里

我希望得到一些关于我的问题的澄清


共 (1) 个答案

  1. # 1 楼答案

    首先,在构造函数上运行持久的数字运算通常是个坏主意。因此,我首先将咀嚼分成不同的方法,如下所示:

    // Initialize
    MainController mainController = new MainController();
    // Do the work
    mainController.doStuff();
    

    然后你可以在线程中运行该部分:

    class MyThread extends Thread {
        MainController mainController;
    
        MyThread(MainController mainController) {
            this.mainController = mainController;
        }
    
        public void run() {
            mainController.doStuff();
        }
    }
    

    现在你可以打电话到其他地方:

    MainController mainController = new MainController();
    MyThread myThread = new MyThread(mainController);
    myThread.start();