java中的Thread和public void run()方法

时间:2013-10-22 21:01:05

标签: java

    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();
        }
    }

}

我的问题是程序不会打印出“test”,也不会循环,尽管'running'是真的。有没有办法可以在run方法中连续循环?

3 个答案:

答案 0 :(得分:2)

您实际上并未要求run()被调用。您所做的就是声明与run()无关的Thread方法。

run()方法放入Runnable并将其传递给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();
            }
        }

    }
});

答案 1 :(得分:2)

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

首先,您创建了一个名为Thread的{​​{1}}。在班级thread方法中,您将start设置为running并致电true。但这只是调用Thread's run() method, which does nothing

  

public void run()

     

如果此线程是使用单独的构造的   Runnable运行对象,然后调用Runnable对象的run方法;   否则,此方法无效并返回。

您没有调用自己的thread.start()方法。

您已创建run方法。我在这里看不到你的类定义,但我假设你的类实现了run。您需要使用Thread constructor that takes a Runnable将您的类的实例作为参数发送到Runnable。然后,Thread会知道运行Thread的{​​{1}}方法。

答案 2 :(得分: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();
  }
}