Java多线程(2)--Thread类继承和Runnable接口创建线程

简介: Java多线程(2)--Thread类继承和Runnable接口创建线程

Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现。


Thread类的特性

每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体,通过该Thread对象的start()方法来启动这个线程,而非直接调用run()。


JDK1.5之前创建新执行线程有两种方法:

①继承Thread类的方式 (点击查看Thread类相关常用的方法)

②实现Runnable接口的方式


方式一:继承Thread类


①定义子类继承Thread类。

②子类中重写Thread类中的run方法。

③创建Thread子类对象,即创建了线程对象。

④调用线程对象start方法:启动线程,调用run方法。


继承Thread的子类MyThread


public class MyThread extends Thread{
    @Override
    public void run() { //该方法体即为该线程要执行的程序
        for (int i = 0;i < 50;i++){
            if (i % 2 == 0) System.out.println(i);
        }
    }
}


创建线程对象并执行


public class TestThread {
    public static void main(String[] args) {
      //创建线程
        MyThread thread = new MyThread();
        //启动该线程,并执行run()方法
        thread.start();
        //以下是不同于thread的线程
        for (int i = 0; i < 50; i++) {
            if (i % 2 == 0) {
                System.out.println(i + "#####");
            }
        }
    }
}


结果(仅截取部分)


0fbbafb1b3c54cb4a16065cc11584c2e.png9615a8e6877942709818129e45c4e5ad.png


该结果随着计算机的不同会有不同的情况,不定。但要表达的意思就是多线程执行的情况下不同线程是并行的。


f5cc9570df3244e29c0cd139e0793585.png


注意点:

①如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。

②run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU调度决定。

③启动多线程,必须通过调用start()方法。

④一个线程对象只能调用一次start()方法启动,如果重复调用了,则将抛出异常“IllegalThreadStateException”。


方式二:实现Runnable接口


①定义子类,实现Runnable接口。

②子类中重写Runnable接口中的run方法。

③通过Thread类含参构造器创建线程对象。

④将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。

⑤调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。


实现Runnable接口的类


public class MThread implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0){
                System.out.println(i);
            }
        }
    }
}


创建对象并执行


public class TestThread {
    public static void main(String[] args) {
        MThread thread = new MThread();
        Thread curThread = new Thread(thread);
        curThread.start();
    }
}


继承方式和实现方式的联系与区别


开发中:优先选择:实现Runnable 接口的方式

原因:①实现的方式没有类的单继承性的局限性。②实现的方式更适合来处理多个线程有共享数据的情况。


联系: public class Thread implements Runnable

相同点:两种方式都需要重写run(),将线程要执行的逻辑写在在run()中。


相关文章
|
2天前
|
监控 Java API
Java 程序设计 第八章 线程
Java 程序设计 第八章 线程
|
2天前
|
存储 安全 Java
Java多线程编程--JUC
Java多线程编程
|
2天前
|
缓存 NoSQL Java
Java高并发实战:利用线程池和Redis实现高效数据入库
Java高并发实战:利用线程池和Redis实现高效数据入库
12 0
|
1月前
|
Java
多线程与并发,Java中介绍一下Thread类和Runnable接口的区别。
多线程与并发,Java中介绍一下Thread类和Runnable接口的区别。
35 1
|
1月前
|
Java Unix 程序员
java 8 新特性讲解Optional类--Fork/Join 框架--新时间日期API--以及接口的新特性和注解
java 8 新特性讲解Optional类--Fork/Join 框架--新时间日期API--以及接口的新特性和注解
71 1
|
19天前
|
Java 程序员
Java中的多线程编程:理解并应用Thread类和Runnable接口
【5月更文挑战第28天】在Java中,多线程编程是一个重要的概念,它允许同时执行多个任务。本文将深入探讨Java的多线程编程,包括Thread类和Runnable接口的使用,以及如何在实际项目中应用这些知识。我们将通过实例来理解这些概念,并讨论多线程编程的优点和可能的挑战。
|
23天前
|
Java
java面试基础 -- 普通类 & 抽象类 & 接口
java面试基础 -- 普通类 & 抽象类 & 接口
26 0
|
24天前
|
Java
【JAVA学习之路 | 提高篇】创建与启动线程之二(继承Thread类)(实现Runnable接口)
【JAVA学习之路 | 提高篇】创建与启动线程之二(继承Thread类)(实现Runnable接口)
|
25天前
|
Java 编译器
java类和对象:继承、多态、接口、抽象类-2
java类和对象:继承、多态、接口、抽象类
33 0
|
25天前
|
Java 编译器
java类和对象:继承、多态、接口、抽象类-1
java类和对象:继承、多态、接口、抽象类
14 0