码迷,mamicode.com
首页 > 编程语言 > 详细

更好的理解java多线程

时间:2016-11-29 13:51:21      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:java多线程   继承   public   cep   interrupt   传递   情况   base   父类   

1.线程的创建

之前知道Java中一个多线程的创建方法是继承Thread类或者实现Runable接口,但是看不懂下面这种创建线程的方法

第一种

 

[java] view plain copy
 
 print?技术分享技术分享
  1. new Thread(new Runnable() {  
  2.             @Override  
  3.             public void run() {  
  4.               
  5.                 }  
  6.             }  
  7.         }).start();//这种方式中new Thread()是创建了一个线程,而new Runable()对象中是线程想要执行的代码,这样把想要执行的代码放到一个创建的对象中,所  
[java] view plain copy
 
 print?技术分享技术分享
  1. <span style="white-space:pre">          </span>   //以很好的体现了面向对象的编程规则。  


或者下面这种创建格式

 

第二种

 

[java] view plain copy
 
 print?技术分享技术分享
  1. new Thread(){  
  2.         @Override  
  3.         public void run() {  
  4.             // TODO Auto-generated method stub  
  5.             super.run();  
  6.         }  
  7.     }.start();  


其实两种方法昨天看了一段是视频现在理解了,其实第一种方法就是面向对象的思维模式去创建一个线程,在Thread的源码中,一种是通过构造方法传递一个Runable对象然后为target赋值,然后去实现一个线程的创建,也就是上面的第一种创建方法,一种是直接重写run方法,也就是上面的第二种方法创建线程,但是网上通常是使用第一种方法的比较多?那是为什么呢?是因为第一种通过构造方法的方式创建线程更能体现面向的规则,new Thread()是创建了一个对象,这个对象想要执行的代码就写在了括号里面,这样就很好的体现了面向对象的编程方式。

 

那我们想一下,下面这种创建对象的方式是会执行Runable中的run方法还是执行thread的run方法呢?

 

[java] view plain copy
 
 print?技术分享技术分享
  1. new Thread(  
  2.                 new  Runnable() {  
  3.                     public void run() {  
  4.                         while (true) {  
  5.                             try {  
  6.                                 Thread.sleep(500);  
  7.                             } catch (InterruptedException e) {  
  8.                                 e.printStackTrace();  
  9.                             }  
  10.                             System.out.println("runable" + Thread.currentThread().getName());  
  11.                         }  
  12.                     }  
  13.                 }  
  14.         ) {  
  15.             @Override  
  16.             public void run() {  
  17.                 while (true) {  
  18.                     try {  
  19.                         Thread.sleep(500);  
  20.                     } catch (InterruptedException e) {  
  21.                         e.printStackTrace();  
  22.                     }  
  23.                     System.out.println("thread" + Thread.currentThread().getName());  
  24.                 }  
  25.             }  
  26.         }.start();  


new Thread(new Runable(){}){}.start();答案是执行thread中的run方法(即是子类中的run方法),为什么呢?因为创建一个new thread的时候重写了父类中的run()方法,那么就会直接执行thread中的run方法了,如果这个子类中的run方法不存在的情况下才会去执行父类中的run方法。

更好的理解java多线程

标签:java多线程   继承   public   cep   interrupt   传递   情况   base   父类   

原文地址:http://www.cnblogs.com/---ming/p/6113010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!