写点什么

【连载 02】 多线程实现

作者:FunTester
  • 2024-11-28
    河北
  • 本文字数:1869 字

    阅读完需:约 6 分钟

Java 多线程实现

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


  1. 继承 java.lang.Thread

  2. 实现 java.lang.Runnable 接口

1. 继承 Thread

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


  1. 定义一个继承自 Thread 的子类,并重写 run() 方法。

  2. run() 方法中编写多线程执行的代码逻辑。

  3. 创建 Thread 子类的实例,调用 start() 方法启动新线程。

示例代码

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()); // 打印线程名称 }}
复制代码

控制台输出

Hello FunTester!    mainHello 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 构造方法创建线程对象,然后启动线程。

示例代码

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()); // 打印线程名称 }}
复制代码

控制台输出

Hello FunTester!    mainHello FunTester!    Thread-0
复制代码


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

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

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

示例代码

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()); // 打印线程名称 }}
复制代码

控制台输出

Hello FunTester!    mainHello FunTester!    Thread-0
复制代码



总结

  • 继承 Thread:适合需要扩展 Thread 类功能的场景,但 Java 不支持多继承,限制了类的设计。

  • 实现 Runnable 接口:更灵活,适合多个线程共享同一任务逻辑的场景。

  • 使用 Lambda 表达式:语法简洁,推荐在支持 Java 8 的项目中使用。


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


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


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

发布于: 刚刚阅读数: 3
用户头像

FunTester

关注

公众号:FunTester,800篇原创,欢迎关注 2020-10-20 加入

Fun·BUG挖掘机·性能征服者·头顶锅盖·Tester

评论

发布
暂无评论
【连载 02】 多线程实现_FunTester_InfoQ写作社区