我想开始学习Java。我即将编写一个非常基本的程序,我想在无限循环中显示一系列数字(1,2,3,4,5 ... .etc)。如果有人按特定键(Say ESCAPE键),程序应该退出。所以我想到将Threads用于这两个任务(无限循环和用户绑定)。我只有一个无限循环的线程,这就是我的代码的样子:
public class LearnJava implements Runnable {
private int i = 0;
private boolean running = false;
private Thread counter;
public void start(){
running = true;
counter = new Thread(this);
counter.start();
}
/*the stop method is not really in use yet*/
public void stop(){
running = false;
try{
counter.join();
}
catch (InterruptedException e){
e.printStackTrace();
}
}
public void run(){
while (running){
System.out.println("ThreadTest: " + i);
i++;
}
}
public LearnJava(){
}
public static void main(String[] args){
LearnJava programm = new LearnJava();
programm.start();
}
}
现在我在自己的例子中不理解的是我的Thread中的“this”引用。我总是尝试在没有任何参考的情况下运行它,因为我不知道它的原因。老实说,我只是随机得到了正确的代码。我自己写了一遍,并且想要正确地理解它,但显然我不是。任何人都可以解释为什么我需要在行中采用“this”参考:
counter = new Thread(this);
答案 0 :(得分:5)
请注意,您已实施Runnable
界面?当你说new Thread(this)
时,你说"创建一个新线程,它将在启动时运行我的班级"
看一下Thread的documentation,你会看到一个带Runnable的构造函数。
答案 1 :(得分:3)
马修G没有错。答案,但是再多一点......
......一个有很多课程的课程,每个课程只有一个职责通常比一个课程有很多职责的课程要好。我知道你刚开始学习语言,但现在开始学习好习惯还为时尚早。
这是一种你会经常在其他人的java代码中看到的模式:
Thread fooThread = new Thread(new Runnable(){
@Override
public void run() {
...do something interesting here...
}
});
这将创建一个实现Runnable接口的 anonymous 类的新实例。它看起来可能不是很多,但是如果你在LearnJava.start()方法中使用它,那么你的LearnJava类的责任就会减少:它不必实现run()方法。