整理一下java多线程的学习-多线程的实现方式(一)

    返回目录

    首先回顾一下多线程的实现方式,两种:Thread、Runnable。

    Thread方式

        new Thread() {
            @Override
            public void run() {
                //TODO 线程逻辑
                System.out.println("");
            }
        }.start();
     Runnable方式
        new Thread(new Runnable() {
            @Override
            public void run() {
                //TODO 线程逻辑
                System.out.println("");
            }
        }).start();
     问题:下面代码打印结果是?
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("runnable");
            }
        }){
            @Override
            public void run() {
                System.out.println("thread");
            }
        }.start();
    答案:thread

    分析:查看Thread类源码如下

    public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
    }   

    private void init(ThreadGroup g, Runnable target, String name,
                      long stackSize) {
        init(g, target, name, stackSize, null);
    }

    private void init(ThreadGroup g, Runnable target, String name,
                      long stackSize, AccessControlContext acc) {
        /* 部分省略 */
        this.target = target;
        /* 部分省略 */
    } 

    @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }
     通过Thread的run方法源码可以看出(这里的target就是我们传入的Runnable对象),Runnable对象的run方法是通过Thread类的run方法来执行的。在这个问题中,虽然传入了Runnable对象,但是同时也重写了Thread的run方法,所以Runnable对象的run方法将不被执行,最后打印结果即为thread。

    对比

    使用Runnable方式优于Thread方式,原因如下:

  1. 能够避免单继承带来的局限性
  2. 多个线程可以服用同一个Runnable对象,使得线程之间能够共享数据
  3. 更好的体现了面向对象的设计思想

    下一篇:定时器

标签: JAVA 多线程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.jsunw.com/?post=10

相关推荐

评论

  1. 2016-03-26 16:04
    前来学习学习

你肿么看?

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。