黑马程序员技术交流社区

标题: 线程this问题 [打印本页]

作者: 黑马-小龙    时间: 2013-1-26 22:21
标题: 线程this问题
本帖最后由 张向辉 于 2013-1-27 14:26 编辑

new Thread(new Runnable(){
public void run(){
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Runnable--:" + Thread.currentThread().getName());
}
}
}){
public void run(){
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread--:" + Thread.currentThread().getName());
}
}
}.start();
这里,为什么运行的结果是:Thread--。
是因为:父类没有,就去子类找的吗?是基于这个原则吗?  这里,可以用this表示当前线程吗?
作者: 逍林游    时间: 2013-1-27 10:57
start()前面多了段代码块啊,第一次见到。能解释下作用吗?
代码块中的run()方法好像把new Runnable(){}中的run()方法覆盖了!
作者: 谢毅    时间: 2013-1-27 11:05
首先我们看这个方法的构造,实例了一个Thread,里面传入一个匿名内部类实现了Runnable,然后后面紧接着写了一个Thread匿名子类,这时的优先级就是运行Thread的匿名子类而不看匿名内部类,你说的用this只能在继承Thread类实现线程这种方式中使用取得线程信息,这里的话可以在Thread的匿名子类中使用
作者: 刘军亭    时间: 2013-1-27 12:05
new Thread(new Runnable(){
        public void run(){
                while(true){
                        try {
                                Thread.sleep(500);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }

                        System.out.println("Runnable--:" + Thread.currentThread().getName());
                }
        }
}).start();


这是开启一个线程的写法,如果想开启多个,可用for循环把上面的代码循环几遍就创建几个。
作者: 胥文    时间: 2013-1-27 12:53
个人是这么理解的
你首先创建了一个线程(这里有A来表示),它实现了Runnable接口,此时,你又创建了一个线程(这里用B来表示)他继承了A,并复写了A的run方法,所以运行结果是子类的内容




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2