加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

认识Java多线程

发布时间:2021-11-18 12:46:29 所属栏目:PHP教程 来源:未知
导读:1.线程的创建 之前知道Java中一个多线程的创建方法是继承Thread类或者实现Runable接口,但是看不懂下面这种创建线程的方法 第一种 new Thread(new Runnable() { @Override public void run() { } } }).start();//这种方式中new Thread()是创建了一个线程,
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方法。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读