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()中。


相关文章
|
7天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
37 6
|
1月前
|
Java
java线程接口
Thread的构造方法创建对象的时候传入了Runnable接口的对象 ,Runnable接口对象重写run方法相当于指定线程任务,创建线程的时候绑定了该线程对象要干的任务。 Runnable的对象称之为:线程任务对象 不是线程对象 必须要交给Thread线程对象。 通过Thread的构造方法, 就可以把任务对象Runnable,绑定到Thread对象中, 将来执行start方法,就会自动执行Runable实现类对象中的run里面的内容。
39 1
|
1月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
46 4
|
1月前
|
数据采集 Java Python
爬取小说资源的Python实践:从单线程到多线程的效率飞跃
本文介绍了一种使用Python从笔趣阁网站爬取小说内容的方法,并通过引入多线程技术大幅提高了下载效率。文章首先概述了环境准备,包括所需安装的库,然后详细描述了爬虫程序的设计与实现过程,包括发送HTTP请求、解析HTML文档、提取章节链接及多线程下载等步骤。最后,强调了性能优化的重要性,并提醒读者遵守相关法律法规。
62 0
|
1月前
|
Java
为什么一般采用实现Runnable接口创建线程?
因为使用实现Runnable接口的同时我们也能够继承其他类,并且可以拥有多个实现类,那么我们在拥有了Runable方法的同时也可以使用父类的方法;而在Java中,一个类只能继承一个父类,那么在继承了Thread类后我们就不能再继承其他类了。
26 0
|
2月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
58 1
C++ 多线程之初识多线程
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
27 3
|
2月前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
23 2
|
2月前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
38 2
|
2月前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
44 1
下一篇
DataWorks