Java线程休眠的5种方法

Java线程休眠的5种方法

Java中的线程可以通过休眠来暂停一段时间。线程的休眠有5种方法,本文将详细介绍这5种方法,并给出代码示例。

方法一:使用Thread.sleep()

Thread.sleep()是Java中比较常用的线程休眠方法。它可以将当前正在执行的线程休眠指定的时间,单位是毫秒。下面是使用Thread.sleep()方法的示例:

public class SleepExample {
    public static void main(String[] args) {
        System.out.println("开始");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("结束");
    }
}

在这个例子中,main()方法将休眠2秒钟,然后输出“结束”。注意,Thread.sleep()方法可能会抛出InterruptedException异常,因此我们应该在try-catch块中使用它。

方法二:使用Object.wait()

Object.wait()方法可以使当前线程等待另一个线程发出通知。它将当前线程置于“等待状态”,直到另一个线程调用了该对象的notify()或notifyAll()方法。下面是一个使用Object.wait()方法的示例:

public class WaitExample {
    public static void main(String[] args) {
        final Object lock = new Object();
        Thread t1 = new Thread(() -> {
            synchronized (lock) {
                try {
                    System.out.println("线程1开始等待");
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("线程1结束等待");
            }
        });
        Thread t2 = new Thread(() -> {
            synchronized (lock) {
                System.out.println("线程2开始唤醒");
                lock.notify();
                System.out.println("线程2结束唤醒");
            }
        });
        t1.start();
        t2.start();
    }
}

在这个例子中,线程1将进入等待状态,直到线程2调用了lock.notify()方法。

方法三:使用Thread.yield()

Thread.yield()方法会提示线程调度器让出一次CPU资源。它会将CPU时间片让给其他线程,从而使所有线程都有机会获得CPU资源。下面是Thread.yield()方法的示例:

public class YieldExample {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("线程1第" + (i + 1) + "次执行");
                Thread.yield();
            }
        });
        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("线程2第" + (i + 1) + "次执行");
                Thread.yield();
            }
        });
        t1.start();
        t2.start();
    }
}

在这个例子中,线程1和线程2将交替执行,每次执行前都会调用Thread.yield()方法。

方法四:使用LockSupport.park()

LockSupport.park()是一个比较底层的方法,可以使当前线程等待另一个线程发出通知。它可以被阻塞和解除阻塞,没有等待上限的限制。下面是LockSupport.park()方法的示例:

public class ParkExample {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            System.out.println("线程1开始等待");
            LockSupport.park();
            System.out.println("线程1结束等待");
        });
        Thread t2 = new Thread(() -> {
            System.out.println("线程2开始唤醒");
            LockSupport.unpark(t1);
            System.out.println("线程2结束唤醒");
        });
        t1.start();
        t2.start();
    }
}

在这个例子中,线程1将进入等待状态,直到线程2调用了LockSupport.unpark(t1)方法。

方法五:使用ScheduledExecutorService.schedule()

ScheduledExecutorService.schedule()方法可以在指定的时间之后执行一次任务或周期性地执行任务。下面是ScheduledExecutorService.schedule()方法的示例:

public class ScheduleExample {
    public static void main(String[] args) {
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
        Runnable task = () -> System.out.println("执行任务");
        executor.schedule(task, 5, TimeUnit.SECONDS);
        executor.shutdown();
    }
}

在这个例子中,程序将在5秒钟后执行一次任务。注意,我们需要在程序退出前关闭ScheduledExecutorService。

总结

这篇文章介绍了Java中线程休眠的5种方法,其中包括:Thread.sleep()、Object.wait()、Thread.yield()、LockSupport.park()和ScheduledExecutorService.schedule()。在实际开发中,我们应该根据具体情况选择合适的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java线程休眠的5种方法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Hibernate通用数据库操作代码

    下面是Hibernate通用数据库操作代码的完整攻略。 什么是Hibernate通用数据库操作代码? Hibernate通用数据库操作代码是指能够适用于多种不同数据模型和表结构的重复使用的数据库操作代码块。 如何写Hibernate通用数据库操作代码? 以下是写Hibernate通用数据库操作代码的步骤: 配置Hibernate 要使用Hibernate,需…

    Java 2023年5月20日
    00
  • 如何使用Java诊断工具?

    使用Java诊断工具可以帮助我们定位Java应用性能和稳定性问题,下面是使用Java诊断工具的攻略与示例说明。 一、准备工作 在使用Java诊断工具之前,需要确保以下条件: 安装Java Development Kit(JDK); 对Java编程语言有一定的基础; 了解如何使用命令行工具。 二、使用Java诊断工具 1. JConsole JConsole是…

    Java 2023年5月11日
    00
  • SpringBoot集成Mybatis并测试

    下面是SpringBoot集成Mybatis并测试的完整攻略: 环境准备 在开始之前,我们需要进行一些准备工作: JDK环境和Maven环境的安装 IntelliJ IDEA或Eclipse IDE的安装 数据库环境的配置以及需要连接的数据库 项目配置 创建项目 在IDE中创建一个SpringBoot项目,并添加所需依赖。pom.xml中需要添加如下依赖: …

    Java 2023年5月20日
    00
  • Java ArrayList深入源码层分析

    Java ArrayList深入源码层分析 简介 ArrayList 是 Java 中集合框架中最基础、最常用的一种数据结构,它基于数组实现,可以动态扩容,支持添加、删除、查找等操作。本文将对 ArrayList 的源码进行深入分析,讲解其内部实现原理。 类的继承关系 ArrayList 类位于 java.util 包下,继承于 AbstractList 类…

    Java 2023年5月26日
    00
  • Java中的StringUtils引入及使用示例教程

    Java中的StringUtils引入及使用示例教程 简介 在Java编程中,字符串处理是非常常见的任务。而Apache Commons Lang库中的StringUtils类,提供了许多有用的方法来帮助我们进行字符串的处理。在本教程中,我们将简要介绍如何引入和使用StringUtils类中的方法。 引入 StringUtils在Apache Commons…

    Java 2023年5月27日
    00
  • java字符串与日期类型转换的工具类

    接下来我将为您详细讲解如何将Java中的字符串类型与日期类型相互转换的工具类。 什么是字符串与日期类型转换的工具类? 在Java中,字符串和日期类型之间的相互转换是比较常见的操作。通常情况下,我们可以使用Java中提供的SimpleDateFormat类来格式化日期并将其存储为字符串,或者解析字符串并将其转换为日期对象。但是对于频繁进行字符串与日期类型转换的…

    Java 2023年5月20日
    00
  • Spring Boot集群管理工具KafkaAdminClient使用方法解析

    Spring Boot集群管理工具KafkaAdminClient使用方法解析 KafkaAdminClient是一个管理Kafka集群的Java API,它提供了创建,删除和修改Kafka集群的主题、分区和副本的API。本文将详细介绍KafkaAdminClient的使用方法。 配置KafkaAdminClient 在Spring Boot项目中使用Kaf…

    Java 2023年5月20日
    00
  • 精确查找PHP WEBSHELL木马的方法(1)

    精确查找PHP WEBSHELL木马的方法(1)攻略 查找PHP WEBSHELL木马一直是网络安全工作者的必备技能之一,本文将介绍一些精确查找PHP WEBSHELL木马的 方法,以帮助网络安全工作者更好地发现和处理木马。 1. 根据木马特征字符串查找 检查服务器上各个网站的PHP文件,可以在其文件头或尾巴查找PHP木马中常用的特征字符串来发现有无木马文件…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部