代码如下:
前两个t1、t2分别用两个匿名内部类创建重写了run函数的接口的对象,再通过对象来创建Thread对象,并设置Thread引用来指向。
后两个t3、t4一个是继承Thread创建和一个是实现Runnable接口来创建,即正常情况,没通过匿名内部使用
public static void main(String[] args)
{
//守护线程 setDaemon()
Thread t1 = new Thread(
new Runnable()
{
public void run()
{
System.out.println("aaaaaaaaa");
}
}
);
Thread t2 = new Thread(
new Runnable()
{
public void run()
{
System.out.println("bbbbbbbbb");
}
}
);
myThread t3 = new myThread();
Thread t4 = new Thread(new myThread1());
t3.start();
//t1.setDaemon(true);
t1.start();
t2.start();
try {
t1.sleep(1000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
for(int i=0; i<10; i++)
{
t1.run();
}
for(int i=0; i<100; i++)
{
t2.run();
}
for(int i=0; i<10; i++)
{
t3.run();
}
for(int i=0; i<10; i++)
{
t4.run();
}
}
}
class myThread extends Thread
{
public void run()
{
System.out.println("ccccccccc");
}
}
class myThread1 implements Runnable
{
public void run()
{
System.out.println("dddddddddd");
}
}
结果是:
可以看出来,匿名内部类只再start中调用,根据我调试过程来看,后面循环调用run是超类的run()。由此推测匿名内部类的声明周期结束了
具体原因等深入研究匿名内部类再谈
补充:后面发先t1、和t2是一样的类型,不能准确说明匿名匿名类,所以补充修改t2:
如下:
Thread t2 = new Thread()
{
public void run()
{
System.out.println("bbbbbbbbb");
}
};
运行结果如图:
匿名内部类中的run依旧可以调用!