如下代码:public class Demo02
{
public static void main(String args[]){
MyThread mt = new MyThread(); //如果这儿的MyThread换成Runnable?
Thread t = new Thread(mt);
t.start();
for (int i=0;i<30 ;i++ )
{
System.out.println( "main在执行!");
}
}
}class MyThread implements Runnable{
public void run(){
for (int i=0;i<30 ;i++ )
{
System.out.println( "MyThread在执行!");
}
}
}问题:如果红色部分的MyThread换成Runnable 会有多大区别?
{
public static void main(String args[]){
MyThread mt = new MyThread(); //如果这儿的MyThread换成Runnable?
Thread t = new Thread(mt);
t.start();
for (int i=0;i<30 ;i++ )
{
System.out.println( "main在执行!");
}
}
}class MyThread implements Runnable{
public void run(){
for (int i=0;i<30 ;i++ )
{
System.out.println( "MyThread在执行!");
}
}
}问题:如果红色部分的MyThread换成Runnable 会有多大区别?
将MyThread 换成Runnable,就是将mt定义为Runnable类型的一个引用;如果Runnable中有些变量被MyThread隐藏了,那么通过Runnable mt = new MyThread(); 就可以看见并使用runnable接口中的被隐藏的变量了!另外,即使 Runnable mt = new MyThread(); 那么mt中实际存储还是MyThread类型的!可以通过此方法判断一下 :
if (mt instanceof MyThread){
System.out.println( "mt实质还是一个MyThreda对象"); }