首页 > 编程语言 > 详细

java多线程与线程并发一:线程基础回顾

时间:2014-03-23 21:08:46      阅读:477      评论:0      收藏:0      [点我收藏+]

本文章内容整理自:张孝祥_Java多线程与并发库高级应用视频教程

线程简单来讲就是程序正在做的事情。多线程即一个程序同时做多件事情,一个线程就是一件事情。

在java中创建线程的方法有两种。

方法一是直接重写Thread对象的run方法。代码如下:

bubuko.com,布布扣
//重写Thread类的run方法
        Thread thread = new Thread(){
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(1000);//线程休眠1秒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Thread"+Thread.currentThread().getName());//打印当前线程的名字
                }
            }
        };
        thread.start();
bubuko.com,布布扣

方法二是创建Runnable对象,重写其的run方法,然后传入Thread对象。

bubuko.com,布布扣
//重写Runnable类的run方法,传入Thread对象
        Thread thread2 = new Thread(new Runnable() {
            
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(1000);//线程休眠1秒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Runnable:"+Thread.currentThread().getName());//打印当前线程的名字
                }
            }
        });
        thread2.start();
bubuko.com,布布扣

这两种方法在效果上没有区别,不过当一个Thread对象既重写了run方法,又传入了Runnable对象时,结果会执行哪个run方法里的代码呢?

答案是,会执行Thread对象重写过的run方法里的代码。

为什么会这样呢?

翻看java源代码可以找到答案。

在Thread类中,run方法是这样实现的:

@Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }

其中的target是一个Runnable对象。

也就是说,只有当Thread对象去实现父类的run方法时,才会使用Runnable对象。假如Thread对象自己实现了run方法,那么父类的run方法相当于作废,自然也就出现了上文提到的结果。

java多线程与线程并发一:线程基础回顾,布布扣,bubuko.com

java多线程与线程并发一:线程基础回顾

原文:http://www.cnblogs.com/bailiyi/p/3619251.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!