查看一些代码,learing about threads:
import java.applet.*;
import java.awt.*;
public class CounterThread extends Applet implements Runnable
{
Thread t;
int Count;
public void init()
{
Count=0;
t=new Thread(this);
t.start();
}
public boolean mouseDown(Event e,int x, int y)
{
t.stop();
return true;
}
public void run()
{
while(true)
{
Count++;
repaint();
try {
t.sleep(10);
} catch (InterruptedException e) {}
}
}
public void paint(Graphics g)
{
g.drawString(Integer.toString(Count),10,10);
System.out.println("Count= "+Count);
}
public void stop()
{
t.stop();
}
}
在构造函数中:
public void init() {
Count=0;
t=new Thread(this);
t.start();
}
为什么这个构造函数不会无限期地继续下去?它看起来像是inits,开始一个新的线程传递自己再次调用构造函数(我想),它创建了一个新的线程等。
我错过了一些有趣的东西。感谢您的帮助
抱歉,我无法使代码看起来正确。出于某种原因,当我将行粘贴到顶部时,不要进入代码解析器。 编辑:谢谢你的回答。为了争论,为了使它成为无限循环,你可以添加它:t=new Thread(new CounterThread());
答案 0 :(得分:6)
this
的传递不会调用构造函数,而是传递引用。它是对您正在创建的CounterThread实例的引用。
答案 1 :(得分:3)
this
不是init方法,它是由该方法初始化的类实例(=对象)。
因此不再隐式调用构造函数。
线程在启动时执行run()
方法。
答案 2 :(得分:1)
当新线程启动时,它不会调用构造函数,它会调用run()
。所以这里没有无限循环。
答案 3 :(得分:0)
传递this
时,不会再次调用构造函数。
答案 4 :(得分:0)
您的构造函数不会永远循环,因为t.start();
会立即返回。 run()
方法的主体在不同的线程中运行。
编辑:看起来没有像其他人提到的那样涉及构造函数。但这种逻辑仍然适用。
答案 5 :(得分:0)
由于其他人都已经覆盖了新的线程(这个)位,我将解决另一方。
启动applet时,这是applet容器执行的伪代码:
Applet applet = new CounterThread();
applet.init();
applet.start();
由于CounterThread没有构造函数,因此Java会创建一个空的默认构造函数。