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

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

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

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

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

java多线程与线程并发一:线程基础回顾
//重写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();
java多线程与线程并发一:线程基础回顾

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

java多线程与线程并发一:线程基础回顾
//重写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();
java多线程与线程并发一:线程基础回顾

这两种方法在效果上没有区别,不过当一个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多线程与线程并发一:线程基础回顾

上一篇:Java函数式编程(八)Optional


下一篇:CentOS 安装java环境