• Java实现线程的两种方式?Thread类实现了Runnable接口吗?


    Thread类实现了Runnable接口吗?

    我们看看源码中对与Thread类的部分声明

    public class Thread implements Runnable {
        /* Make sure registerNatives is the first thing <clinit> does. */
        private static native void registerNatives();
        static {
            registerNatives();
        }
    
        private volatile String name;
        ...
    

    现在是不是很清楚了,Thread 类是实现了Runnable接口的。

    实现多线程的两种方法

    第一种方法:继承Thread类

    方法步骤总结:

    • 定义一个类继承Thread;
    • 重写Thread类中的run方法,将需要被多线程执行的代码存储到该run方法当中。
    • 建立Thread类的子类创建线程对象。
    • 直接调用子类从Thread类继承的start方法,开启一个线程(调用该线程的run方法)。

    第二种方法:实现Runable接口

    Thread类有一个Thread(Runnable target)构造方法,在Runable接口类中只有一个run()方法。

    当使用Thread(Runnable target)方法创建线程对象时,需要为该方法传递一个实现 Runnable接口的对象,这样创建的线程将调用那个实现了Runnable接口类对象中的run()方法作为其运行代码,而不再是调用Thread类中的run方法了。

    方法步骤总结:

    • 定义一个类实现Runnable接口,覆盖Runnable接口中的run方法,将线程要运行的代码存放在该run方法中;
    • 通过Thread类建立线程对象,将Runnable接口的子类实例对象作为实际参数传递给Thread类的构造方法。

    两种方式区别

    • 继承Thread: 线程代码存放Thread子类run方法中,且该run方法被调用。
    • 实现Runnable:线程代码存在实现了Runnable类接口的对象的run方法中,且该run方法被调用。

    注意:启动一个新的线程,不是直接调用Thread子类的对象的run方法,而是调用Thread子类对象的start方法。

    start方法是从Thread类中继承的方法,Thread类对象的start方法将产生一个新的线程,并在该线程上运行该Thread类对象中的run方法。

    根据面向对象的多态性可知,在该线程上实际运行的是我们编写的那个类(Thread的子类)对象中的run方法。

  • 相关阅读:
    vim发现交换文件
    Linux vim 一般模式(底线模式) 命令行模式 插入模式 记录2:
    linux的停止命令
    Linux centos7 常用命令 记录1:
    linux操作系统的关机命令
    linux解密shadow_Linux密码文件passwd和shadow分析
    mysql中root用户被忽略?
    Linux笔记01
    重装系统后恢复MySQL服务,Can't create test file C:ProgramDataMySQLMySQL
    重装JDK后,输入java -version报错:could not open " xxxxjvm.cf "
  • 原文地址:https://www.cnblogs.com/zxfei/p/11067244.html
Copyright © 2020-2023  润新知