0
    public Thread thread = new Thread();

    public void start() {
        running = true;
        thread.start();
    }

public void run() {

    while(running) {

        System.out.println("test");

        try {
            thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

我的问题是程序不会打印出“测试”,也不会看起来循环,尽管“运行”是真的。有没有办法可以在 run 方法中连续循环?

4

3 回答 3

2

你实际上并没有要求run()被叫到。您所做的只是声明一个run()Thread.

将您的run()方法放入 aRunnable并将其传递给Thread.

public Thread thread = new Thread(new Runnable() {

    public void run() {

        while (running) {

            System.out.println("test");

            try {
                thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
});
于 2013-10-22T21:03:03.143 回答
2

问题似乎是您没有运行run您认为您正在线程中运行的方法。

首先,您创建了一个Thread被调用的thread. 在您的班级start方法中,您设置runningtrue调用thread.start(). 但这只是调用Thread'srun()方法,它什么都不做

公共无效运行()

如果该线程是使用单独的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,此方法不执行任何操作并返回。

你没有调用你自己的run方法。

您已经创建了一个run方法。我在这里看不到你的类定义,但我假设你的类实现了Runnable. 您需要Thread使用Thread带有Runnable. 然后Thread就会知道运行你Runnablerun()方法。

于 2013-10-22T21:03:19.503 回答
0

那么你需要调用start()来启动线程。否则既running不会是真的也不会thread.start()被执行。好吧,我猜你打算做这样的事情:

class MyTask implements Runnable
{
   boolean running = false;
   public void start() {
        running = true;
        new Thread(this).start();
    }

public void run() {

    while(running) {

        System.out.println("test");

        try {
            Thread.sleep(1000); 
              // you were doing thread.sleep()! sleep is a static function
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

  public static void main(String[] args)
  {
     new MyTask().start();
  }
}
于 2013-10-22T21:17:12.890 回答