Java多线程:主线程睡眠,子线程执行完毕唤醒

1. 简介

在Java中,多线程是并发编程的核心概念之一。通过多线程,我们能够同时执行多个任务,提高程序的效率和性能。在多线程编程中,有时候我们需要实现主线程睡眠,等待子线程执行完毕后再唤醒主线程继续执行。本文将教会您如何实现这一功能。

2. 流程概述

下面是实现“Java多线程主线程睡眠,子线程执行完毕唤醒”的整体流程概述,我们可以使用一个表格来展示每一步的具体内容。

步骤 描述
1 创建一个继承自Thread类的子类,并重写run()方法
2 在子线程的run()方法中编写子线程的逻辑
3 在主线程中创建子线程的实例,并调用start()方法启动子线程
4 在主线程中使用Thread.sleep()方法使主线程睡眠
5 在子线程的逻辑执行完毕后,唤醒主线程继续执行

3. 代码实现

3.1 创建子线程

首先,我们需要创建一个继承自Thread类的子类,并重写run()方法。在run()方法中编写子线程的逻辑。

class MyThread extends Thread {
    @Override
    public void run() {
        // 子线程的逻辑代码
    }
}

3.2 子线程逻辑

在子线程的run()方法中编写子线程的逻辑。假设我们要在子线程中打印一些信息。

class MyThread extends Thread {
    @Override
    public void run() {
        // 子线程的逻辑代码
        for (int i = 0; i < 5; i++) {
            System.out.println("子线程执行,i = " + i);
        }
    }
}

3.3 主线程创建子线程并启动

在主线程中,我们需要创建子线程的实例,并调用start()方法启动子线程。

public class MainThread {
    public static void main(String[] args) {
        MyThread myThread = new MyThread(); // 创建子线程实例
        myThread.start(); // 启动子线程
    }
}

3.4 主线程睡眠

在主线程中使用Thread.sleep()方法使主线程睡眠。这样主线程将会暂停执行一段时间。

public class MainThread {
    public static void main(String[] args) {
        MyThread myThread = new MyThread(); // 创建子线程实例
        myThread.start(); // 启动子线程

        try {
            Thread.sleep(2000); // 主线程睡眠2秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

3.5 子线程执行完毕后唤醒主线程

在子线程的逻辑执行完毕后,我们可以通过Thread.join()方法唤醒主线程继续执行。join()方法会等待子线程执行完毕后再继续执行主线程。

class MyThread extends Thread {
    @Override
    public void run() {
        // 子线程的逻辑代码
        for (int i = 0; i < 5; i++) {
            System.out.println("子线程执行,i = " + i);
        }
    }
}

public class MainThread {
    public static void main(String[] args) {
        MyThread myThread = new MyThread(); // 创建子线程实例
        myThread.start(); // 启动子线程

        try {
            myThread.join(); // 等待子线程执行完毕
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        System.out.println("主线程执行");
    }
}

4. 状态图

下面是该多线程程序的状态图,使用mermaid语法的state