您的位置:首页 > 编程语言 > Java开发

学习java多线程的笔记1--Thread(Runnable t)与重写run()方法等

2017-08-23 15:57 337 查看

今天看了看《Java2核心技术卷II:高级特性》中的--多线程--这一篇,还有看了张孝祥老师的Java多线程与并发库高级应用视频。顺便做个笔记,方便以后复习一下java相关知识:

关于线程Thread类中的  

Thread(Runnable target)
 构造方法的使用

代码一:

[java] view plain copy
  1. package cn.yang.thread;  
  2.   
  3. public class ThradTest2 {  
  4.   
  5.     /** 
  6.      * Thread(Runnable target)  
  7.      *  分配新的 Thread 对象。 
  8.      * @param args 
  9.      */  
  10.     public static void main(String[] args) {  
  11.         //new Thread(new Runnable(){run()/*...*/}){run()/*...*/}.start();  
  12.   
  13.         new Thread(  
  14.                 new Runnable() {  
  15.                     public void run() {  
  16.                         System.out.println("this is Runnable run");  
  17.                     }  
  18.                 }  
  19.                 ){  
  20.             public void run() {  
  21.                 System.out.println("this is Thread run");  
  22.             }  
  23.         }.start();  
  24.           
  25.           
  26.     }  
  27.   
  28. }  

上面的代码创建了一个Thread匿名类,使用的构造方法是
Thread(Runnable target)

像使用Thread()构造方法一样写以下的代码:

代码二:

[java] view plain copy
  1. new Thread(){  
  2.         public void run() {  
  3.         //do something  
  4.             };  
  5.         }.start();  

上面的写法是新建一个Thread匿名类,再实现它里面的run()方法。So...这个很容易理解为什么是这样一回事!

但我要使用

Thread(Runnable target)
构造方法时,先写一个Runnable匿名类实例对象,重写里面的run()方法。

就如代码一中的那样:

代码三:

[java] view plain copy
  1. new Thread(  
  2.                 new Runnable() {  
  3.                     public void run() {  
  4.                         System.out.println("this is Runnable run");  
  5.                     }  
  6.                 }  
  7.                 ){  
  8.             public void run() {  
  9.                 System.out.println("this is Thread run");  
  10.             }  
  11.         }.start();  
既重写了Thread匿名类的run()方法,又重写了Runnable匿名类的run()方法。问题:最终调用哪一个类中的run()方法?

运行结果——>this is Thread run

很明显,执行了Thread匿名类的run()方法,而没有执行Runnable匿名类的run()方法。

因为上面的代码重写了Thread匿名类的run()方法.体现了面向对象编程思想

当没有重写Thread匿名类的run()方法,而仅仅重写了Runnable匿名类的run()方法,则会执行Runnable匿名类的run()方法。像这样...

代码四:

[java] view plain copy
  1. new Thread(  
  2.                 new Runnable() {  
  3.                     public void run() {  
  4.                         System.out.println("this is Runnable run");  
  5.                     }  
  6.                 }  
  7.                 ){  
  8.         }.start();  
  9.     }  

运行结果——>this is Runnable run


就是这样子了

摘自张老师的PPT上的知识点:

涉及到的一个以往知识点:匿名内部类对象的构造方法如何调用父类的非默认构造方法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐