今天看了看《Java2核心技术卷II:高级特性》中的--多线程--这一篇,还有看了张孝祥老师的Java多线程与并发库高级应用视频。顺便做个笔记,方便以后复习一下java相关知识:
关于线程Thread类中的 Thread(Runnable target)
构造方法的使用
代码一:
package cn.yang.thread;
public class ThradTest2 {
/**
* Thread(Runnable target)
* 分配新的 Thread 对象。
* @param args
*/
public static void main(String[] args) {
//new Thread(new Runnable(){run()/*...*/}){run()/*...*/}.start();
new Thread(
new Runnable() {
public void run() {
System.out.println("this is Runnable run");
}
}
){
public void run() {
System.out.println("this is Thread run");
}
}.start();
}
}
上面的代码创建了一个Thread匿名类,使用的构造方法是
Thread(Runnable target)
像使用Thread()构造方法一样写以下的代码:
代码二:
new Thread(){
public void run() {
//do something
};
}.start();
上面的写法是新建一个Thread匿名类,再实现它里面的run()方法。So...这个很容易理解为什么是这样一回事!
但我要使用Thread(Runnable target)
构造方法时,先写一个Runnable匿名类实例对象,重写里面的run()方法。
就如代码一中的那样:
代码三:
new Thread(
new Runnable() {
public void run() {
System.out.println("this is Runnable run");
}
}
){
public void run() {
System.out.println("this is Thread run");
}
}.start();
既重写了Thread匿名类的run()方法,又重写了Runnable匿名类的run()方法。问题:最终调用哪一个类中的run()方法?
运行结果——>this is Thread run
很明显,执行了Thread匿名类的run()方法,而没有执行Runnable匿名类的run()方法。
因为上面的代码重写了Thread匿名类的run()方法.体现了面向对象编程思想
当没有重写Thread匿名类的run()方法,而仅仅重写了Runnable匿名类的run()方法,则会执行Runnable匿名类的run()方法。像这样...
代码四:
new Thread(
new Runnable() {
public void run() {
System.out.println("this is Runnable run");
}
}
){
}.start();
}
运行结果——> this is Runnable run
就是这样子了
摘自张老师的PPT上的知识点:
涉及到的一个以往知识点:匿名内部类对象的构造方法如何调用父类的非默认构造方法
以上的笔记在2012.3.26晚由菜鸟小弟我记下的。:->