前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【连载 02】 多线程实现

【连载 02】 多线程实现

作者头像
FunTester
发布2025-01-23 16:17:07
发布2025-01-23 16:17:07
7000
代码可运行
举报
文章被收录于专栏:FunTesterFunTester
运行总次数:0
代码可运行

Java 多线程实现

Java 多线程有多种实现方式,在测试工作中最常用的有两种:

  1. 继承 java.lang.Thread
  2. 实现 java.lang.Runnable 接口

1. 继承 Thread

通过继承 java.lang.Thread 实现 Java 多线程的步骤如下:

  1. 定义一个继承自 Thread 的子类,并重写 run() 方法。
  2. run() 方法中编写多线程执行的代码逻辑。
  3. 创建 Thread 子类的实例,调用 start() 方法启动新线程。

示例代码

代码语言:javascript
代码运行次数:0
复制
package org.funtester.performance.books.chapter01.section2;

/**
 * 继承 {@link Thread} 实现 Java 多线程 
 */
public class FunThreadFirst extends Thread {

    /**
     * 主线程
     * @param args
     */
    public static void main(String[] args) {
        new FunThreadFirst().start(); // 启动线程
        System.out.println("Hello FunTester!    " + Thread.currentThread().getName()); // 打印线程名称
    }

    /**
     * 重写 {@link Thread#run()} 方法
     */
    @Override
    public void run() {
        try {
            Thread.sleep(100); // 睡眠 100 毫秒
        } catch (InterruptedException e) {
            e.printStackTrace(); // 打印异常堆栈
        }
        System.out.println("Hello FunTester!    " + Thread.currentThread().getName()); // 打印线程名称
    }
}

控制台输出

代码语言:javascript
代码运行次数:0
复制
Hello FunTester!    main
Hello FunTester!    Thread-0

我们在 run() 方法中增加了 100ms 的休眠,这样 main 线程的输出会优先于我们创建的多线程 Thread-0 输出,表明 main 线程与 Thread-0 是并发执行的,非阻塞。

2. 实现 Runnable 接口

通过实现 java.lang.Runnable 接口实现 Java 多线程的步骤如下:

  1. 定义一个类,并实现 Runnable 接口的 run() 方法。
  2. run() 方法中编写多线程执行逻辑。
  3. 创建 Runnable 实现类对象,并传递给 Thread 构造方法创建线程对象,然后启动线程。

示例代码

代码语言:javascript
代码运行次数:0
复制
package org.funtester.performance.books.chapter01.section2;

/**
 * 实现 {@link Runnable} 接口实现 Java 多线程
 */
public class FunThreadSecond implements Runnable {

    /**
     * 主线程
     * @param args
     */
    public static void main(String[] args) {
        FunThreadSecond second = new FunThreadSecond(); // 创建 Runnable 实例
        new Thread(second).start(); // 启动线程
        System.out.println("Hello FunTester!    " + Thread.currentThread().getName()); // 打印线程名称
    }

    /**
     * 重写 {@link Runnable#run()} 方法
     */
    @Override
    public void run() {
        try {
            Thread.sleep(100); // 睡眠 100 毫秒
        } catch (InterruptedException e) {
            e.printStackTrace(); // 打印异常堆栈
        }
        System.out.println("Hello FunTester!    " + Thread.currentThread().getName()); // 打印线程名称
    }
}

控制台输出

代码语言:javascript
代码运行次数:0
复制
Hello FunTester!    main
Hello FunTester!    Thread-0

同样地,输出顺序表明两个线程的执行代码相互不干扰,是非阻塞的。

3. 使用 Lambda 表达式实现多线程

在 Java 8 中,可以使用 Lambda 表达式实现多线程。这种方式是实现 Runnable 接口的简化变种,语法更加简洁,在后续线程池中使用时也非常常见。

示例代码

代码语言:javascript
代码运行次数:0
复制
package org.funtester.performance.books.chapter01.section2;

/**
 * 使用 Lambda 表达式实现 Java 多线程
 */
public class FunThreadThird {

    /**
     * 主线程
     * @param args
     */
    public static void main(String[] args) {
        new Thread(() -> System.out.println("Hello FunTester!    " + Thread.currentThread().getName())).start(); // 创建并启动线程
        System.out.println("Hello FunTester!    " + Thread.currentThread().getName()); // 打印线程名称
    }
}

控制台输出

代码语言:javascript
代码运行次数:0
复制
Hello FunTester!    main
Hello FunTester!    Thread-0

总结

  • 继承 Thread:适合需要扩展 Thread 类功能的场景,但 Java 不支持多继承,限制了类的设计。
  • 实现 Runnable 接口:更灵活,适合多个线程共享同一任务逻辑的场景。
  • 使用 Lambda 表达式:语法简洁,推荐在支持 Java 8 的项目中使用。

每种方法都有其适用场景,根据实际需求选择合适的实现方式。

书的名字:从 Java 开始做性能测试

如果本书内容对你有所帮助,希望各位多多赞赏,让我可以贴补家用。赞赏两位数可以提前阅读未公开章节。我也会尝试制作本书的视频教程,包括必要的答疑。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java 多线程实现
    • 1. 继承 Thread 类
      • 示例代码
      • 控制台输出
    • 2. 实现 Runnable 接口
      • 示例代码
      • 控制台输出
    • 3. 使用 Lambda 表达式实现多线程
      • 示例代码
      • 控制台输出
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档