Java 实现多线程的几种方式-超详细(干货)

本文详细介绍了Java中实现多线程的几种方式,包括继承Thread类、实现Runnable接口以及Java 8的新语法。文章指出,虽然继承Thread类可以直接使用内置函数,但限制了进一步的类继承;而实现Runnable接口则更灵活,可以与其他类继承。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

订阅 TheTutorials/Java 学习更多 Java 相关的知识

Java 多线程

Java 本身提供了对多线程的支持,多线程允许并发的执行程序的多个部分,最大成程度的利用 CPU,一个进程是由多个线程所组成,因此线程可以看作轻量级进程。

Java 实现多线程

  • 继承 Thread

    public static void main(String[] args) {
    
        /* 创建线程 */
        MyThread firstThread = new MyThread("firstThread");
        MyThread secondThread = new MyThread("secondThread");
    
        /* 启动线程,当线程获取CPU时间片的时候就会开始运行 */
        firstThread.start();
        secondThread.start();
    }
    
    static class MyThread extends Thread {
        MyThread(String name) {
            super(name);
        }
    
        MyThread() {
            super();
        }
    
        @Override
        public void run() {
            super.run();
            System.out.format("线程%s正在运行,线程id:%d\n",
                    Thread.currentThread().getName(), Thread.currentThread().getId());
        }
    }
    

    输出

    线程secondThread正在运行,线程id:22
    线程firstThread正在运行,线程id:21
    
  • 实现 Runnable 接口 (推荐)

    public static void main(String[] args) {
        Thread firstThread = new Thread(new MyThread(), "firstThread");
        Thread secondThread = new Thread(new MyThread(), "secondThread");
    
        firstThread.start();
        secondThread.start();
    }
    
    static class MyThread implements Runnable {
        @Override
        public void run() {
            System.out.format("线程%s正在运行,线程id:%d\n",
                    Thread.currentThread().getName(), Thread.currentThread().getId());
        }
    }
    

    输出

    线程secondThread正在运行,线程id:22
    线程firstThread正在运行,线程id:21
    
  • 匿名 Runnable 类 (Java 8 之前的版本)

    new Thread(new Runnable() {
        @Override
        public void run() {
            new Thread(()-> System.out.format("线程%s正在运行,线程id:%d\n",
                    Thread.currentThread().getName(), Thread.currentThread().getId())).start();
        }
    }).start();
    
  • Java 8 lambda 语法格式实现多线程

    public static void main(String[] args) {
        Thread firstThread = new Thread(()-> System.out.format("线程%s正在运行,线程id:%d\n",
                Thread.currentThread().getName(), Thread.currentThread().getId()));
        firstThread.start();
    
        new Thread(()-> System.out.format("线程%s正在运行,线程id:%d\n",
                Thread.currentThread().getName(), Thread.currentThread().getId())).start();
    }
    

使用 Thread 还是 Runnable

  • 如果我们的类继承了 Thread,那么将无法继承其他的类,因为 Java 不支持多继承,而当我们实现 Runnable 接口还能继续继承其他的类

  • 如果继承 Thread 类我们可以实现基本的功能,因为 Thread 提供类一些内置函数如 yield(), interrupt 等,这些是实现 Runnable 接口没有的功能

References

  1. https://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread-in-java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值