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方法中连续循环?
答案 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();
}
}