//在注释的地方选择合适的选项填入,以保证程序可以从1记数到100
class Counter
{
public int startHere=1;
public int endHere=100;
public static void main(String[] args)
{
new Counter().go();
}
void go()
{
//**********
Thread t=new Thread(a);
t.start();
}
}
A. Thread a=new Thread()
{
public void run()
{
for (int i=startHere;i<=endHere;i++)
System.out.println(i);
}
};
B. Runnable a=new Runnable()
{
public void run()
{
for (int i=startHere;i<=endHere;i++)
System.out.println(i);
}
};
我一看,就选择了B,可以我错了,答案是AB.
我觉得就纳闷了,怎么Thread的构造器怎么还有Thread(Thread t)这种形式的啊?
哦,仔细想想,应该是Implicit Casting的情况,因为Thread类实现了Runnable接口,所以Thread类的匿名子类可以上溯造型到Runnable型,作为Runnable型的参数传入Thread构造器.
不知道大家的看法如何?
-------------------------------------------------------------------------------------------------
同意。
Thread当然也是Runnable的了。
------------------------------------------------------------------------------------------------
原因就是如此,不过不只是匿名子类可以,Thread类本来就可以被强制转换为Runnable类型
class Counter
{
public int startHere=1;
public int endHere=100;
public static void main(String[] args)
{
new Counter().go();
}
void go()
{
//**********
Thread t=new Thread(a);
t.start();
}
}
A. Thread a=new Thread()
{
public void run()
{
for (int i=startHere;i<=endHere;i++)
System.out.println(i);
}
};
B. Runnable a=new Runnable()
{
public void run()
{
for (int i=startHere;i<=endHere;i++)
System.out.println(i);
}
};
我一看,就选择了B,可以我错了,答案是AB.
我觉得就纳闷了,怎么Thread的构造器怎么还有Thread(Thread t)这种形式的啊?
哦,仔细想想,应该是Implicit Casting的情况,因为Thread类实现了Runnable接口,所以Thread类的匿名子类可以上溯造型到Runnable型,作为Runnable型的参数传入Thread构造器.
不知道大家的看法如何?
-------------------------------------------------------------------------------------------------
同意。
Thread当然也是Runnable的了。
------------------------------------------------------------------------------------------------
原因就是如此,不过不只是匿名子类可以,Thread类本来就可以被强制转换为Runnable类型
Java计数器线程示例
本文通过一个Java计数器线程示例,展示了如何使用Thread和Runnable两种方式实现从1计数到100的过程。解释了为什么两种方式都可以实现目标,并讨论了Thread类和Runnable接口之间的关系。
2991

被折叠的 条评论
为什么被折叠?



