理解Java多线程

1.线程的创建

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

第一种

new Thread(new Runnable() { 
            @Override 
            public void run() { 
             
                } 
            } 
        }).start();//这种方式中new Thread()是创建了一个线程,而new Runable()对象中是线程想要执行的代码,这样把想要执行的代码放到一个创建的对象中,所以很好的体现了面向对象的编程规则。 

或者下面这种创建格式

第二种

new Thread(){ 
        @Override 
        public void run() { 
            // TODO Auto-generated method stub 
            super.run(); 
        } 
    }.start(); 

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

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

new Thread( 
                new  Runnable() { 
                    public void run() { 
                        while (true) { 
                            try { 
                                Thread.sleep(500); 
                            } catch (InterruptedException e) { 
                                e.printStackTrace(); 
                            } 
                            System.out.println("runable" + Thread.currentThread().getName()); 
                        } 
                    } 
                } 
        ) { 
            @Override 
            public void run() { 
                while (true) { 
                    try { 
                        Thread.sleep(500); 
                    } catch (InterruptedException e) { 
                        e.printStackTrace(); 
                    } 
                    System.out.println("thread" + Thread.currentThread().getName()); 
                } 
            } 
        }.start(); 

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

猜你喜欢

转载自www.linuxidc.com/Linux/2016-11/137705.htm
今日推荐