并行无限循环

时间:2011-08-07 05:55:54

标签: java multithreading

我在Java中第一次使用线程。让我知道这是什么导致无限循环以及我如何解决它。我认为问题是由于我正在使用GUI和线程这一事实。

会发生GUI的无限副本。

public static void main(String[] args) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
                new RollplayGUI();
        }
    });
}

public RollplayGUI() {
    createGUI();
    RollplayGUI rg = new RollplayGUI();
    Thread trg = new Thread(rg);
    trg.setDaemon(true);
    trg.run();
}

public void run() {
        //Some fun stuff my daemon thread is supposed to do 
    }

我这样做的原因是run()方法执行一些阻塞的网络代码,直到它从另一个程序获得连接。

5 个答案:

答案 0 :(得分:7)

您的代码失败,因为RollplayGUI构造函数正在实例化一个新的RollplayGUI对象。这将导致无限循环并且可能是...堆栈溢出。

答案 1 :(得分:2)

获得无数gui的一个原因是你让每个RollplayGUI在实例化后立即创建一个新的RollplayGUI。

另外,你应该在Thread对象上调用start(),而不是运行。如果你调用run,那就好像你没有进行线程化。 start()正确处理线程。

答案 2 :(得分:0)

这是一个无限循环,因为你有RollbackGUI()创建一个新的RollbackGUI()。删除这一行:

RollplayGUI rg = new RollplayGUI();

答案 3 :(得分:0)

贾斯汀所说的,但一旦解决了这个问题,你就永远不会开始。您只是创建一个Thread对象(它将在何时启动时表示该线程),然后在原始线程中执行其run()方法。使用trg.start()而不是trg.run()来实际启动线程。

答案 4 :(得分:0)

当您创建第一个RollplayGUI时,将调用构造函数。在该构造函数中,您创建一个新的RollplayGUI,其构造函数将再次调用RollplayGUI。这将无限期地发生,这是无限循环。

该行是

RollplayGUI rg = new RollplayGUI();