线程初步(六)----匿名内部类的使用

来源:互联网 发布:网络用语 编辑:程序博客网 时间:2024/06/05 22:20
今天我们学习一波线程里内部类的使用我们先展示一下代码
/** * 使用匿名内部类 * @author lover * */public class InnerDemo {public static void main(String[] args) {    //使用内部类创建一个线程对象    new Thread("Thread创建的线程"){            public void run(){            for(int i=0;i<=10;i++){                System.out.println(Thread.currentThread().getName()+"----->"+i);            }        }    }.start();    //使用Runnable接口在主线程内创建一个线程对象    Runnable r=new Runnable (){        public void run(){            for(int i=0;i<=10;i++){                System.out.println(Thread.currentThread().getName()+"----->"+i);            }        }    };      new Thread(r,"Runnable创建的线程").start();    //主线程    for(int i=0;i<=10;i++){        System.out.println(Thread.currentThread().getName()+"----->"+i);    }}}

在代码中,我们在主类中创建了Thread类和Runnable接口(两个线程),使代码可以并发运行,我们来看一下输出的结果

Thread创建的线程----->0Runnable创建的线程----->0main----->0Runnable创建的线程----->1Thread创建的线程----->1Runnable创建的线程----->2main----->1Runnable创建的线程----->3Thread创建的线程----->2Runnable创建的线程----->4main----->2Runnable创建的线程----->5Thread创建的线程----->3Runnable创建的线程----->6main----->3Runnable创建的线程----->7Thread创建的线程----->4Runnable创建的线程----->8main----->4Runnable创建的线程----->9Thread创建的线程----->5Runnable创建的线程----->10main----->5Thread创建的线程----->6Thread创建的线程----->7main----->6Thread创建的线程----->8Thread创建的线程----->9Thread创建的线程----->10main----->7main----->8main----->9main----->10

接下来我们分析另一个匿名实例,我先贴一波代码

/** * 匿名内部类分析 * @author lover * */public class InnerDemo2 {public static void main(String[] args) {    new Thread(            new Runnable (){                public void run(){                    System.out.println("Runnable run");                }            }            ){        public void run(){            System.out.println("Thread run");                   }           }.start();}}

从代码中我们可以看到我们先创建了一个Thread的子类对象,又向里边传了一个Runnable对象,这时候程序将会输出什么呢,大家可以猜一猜
好了,我公布下结果,这个程序运行之后输出的结果是

Thread run
为什么会是这样的结果呢,我们来具体分析一下首先,runnable对象传进Thread里边会进行判断,如果Runable有run方法则会执行run方法,如果没有则执行Thread里的run方法。在此程序中,我们是向Thread创建的子类传入的Runnable对象,子类已经不需要再去判断传入的Runnable对象是否有run方法,而是直接执行子类的对象。所以输出的是Thread子类对象的run,自然也就是Thread run。
原创粉丝点击