一点一点分析:
把代码拆成4部分,
1. new Thread()声明一个对象,这里用了匿名类的方式,后面有具体实现
2 声明匿名类实现
{
public void run(){
System.out.println("subthread run");
}
}
3 然后看这匿名对象的构造参数,
new Runnable(){ //匿名
public void run(){
System.out.println("runnable run");
}
}
4 已经拿到了匿名Thread的引用,调用start()方法
实际上就是一个匿名对象Thread,传入了一个匿名对象Runnable作为构造参数。
对比一下正常的线程创建方式:
第一种: class test implements Runnable(){
@override
public void run(){
...
}
}
...main(){
Thread thread = new Thread(new test());
thread.start();
}
第二种:再看用Thread的方式
class test2 extends Thread(){
@override
public void run(){
....
}
}
也就是说:
你贴的代码就是第一种方式,只不过用了匿名的方式,
然后创建thread对象的时候
如果构造方法传入了runable、callable接口的参数,那就运行传入的参数
而不再运行自己的run方法。