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


相关文章
|
9月前
|
监控 Kubernetes Java
阿里面试:5000qps访问一个500ms的接口,如何设计线程池的核心线程数、最大线程数? 需要多少台机器?
本文由40岁老架构师尼恩撰写,针对一线互联网企业的高频面试题“如何确定系统的最佳线程数”进行系统化梳理。文章详细介绍了线程池设计的三个核心步骤:理论预估、压测验证和监控调整,并结合实际案例(5000qps、500ms响应时间、4核8G机器)给出具体参数设置建议。此外,还提供了《尼恩Java面试宝典PDF》等资源,帮助读者提升技术能力,顺利通过大厂面试。关注【技术自由圈】公众号,回复“领电子书”获取更多学习资料。
|
11月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
946 60
|
9月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
485 15
|
10月前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
179 6
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
157 0
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
286 1
|
Java
Java基础系列-第一章 创建Thread的6种方式和线程常用方法
读完本章节,您将掌握如何创建线程和线程的常用方法。
289 1
Java基础系列-第一章 创建Thread的6种方式和线程常用方法
|
缓存 安全 Java
JAVA Thread Dump分析线程竞争
JAVA Thread Dump分析线程竞争
212 0

热门文章

最新文章

下一篇
开通oss服务