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日

相关文章

  • Java BufferedOutputStream类的常用方法讲解

    Java BufferedOutputStream是一个高效字节输出流,它使用内部缓冲区将数据缓冲,然后批量写入到支持的输出流中,以提高系统的性能。本文将分享Java BufferedOutputStream类的常用方法,帮助大家更好地使用该类。 BufferedOutputStream类的常用方法 构造方法 BufferedOutputStream类有两个…

    Java 2023年5月26日
    00
  • python读取json文件并将数据插入到mongodb的方法

    下面是详细的Python读取JSON文件并将数据插入到MongoDB的方法攻略。 1. 在Python中读取JSON文件 要在Python中读取JSON文件,我们需要使用json模块。json模块提供了几个功能,用于将JSON数据转换为Python对象和将Python对象转换为JSON数据。 以下是读取JSON文件的示例代码: import json # 读…

    Java 2023年5月26日
    00
  • Java实现深度搜索DFS算法详解

    Java实现深度搜索DFS算法详解 DFS简介 深度搜索(Depth First Search, DFS)是一种用于遍历或搜索树或图的算法。其基本思想是从根节点出发,尽可能深的遍历每一个节点,直到没有下一个未访问的节点,然后回溯到最近的未访问节点,并继续访问其它节点。 DFS算法流程 DFS算法的流程如下: 将起始节点添加到栈中 判断栈是否为空,如果为空则退…

    Java 2023年5月19日
    00
  • 如何使用Java Agent?

    以下是使用Java Agent的完整使用攻略: 什么是Java Agent? Java Agent是JVM的一个重要功能,可以在运行时修改代码行为。Java Agent可以利用JVM提供的Java Instrumentation API,拦截和转换字节码,以实现代码注入、性能优化、运行时监控等功能。 如何使用Java Agent? 以下是使用Java Age…

    Java 2023年5月11日
    00
  • Java学生信息管理系统设计(数据库版)

    Java学生信息管理系统设计(数据库版)攻略 1. 确定需求 首先需要明确学生信息管理系统的需求,包括以下几个方面: 学生信息的增加、删除、修改、查询等操作; 可以根据学生的姓名、学号等信息进行查询和排序; 连接数据库实现数据的存储和读取。 2. 设计数据库 设计数据库是整个系统设计的关键部分,需要根据需求确定数据库的表结构、字段属性等。 以学生信息为例,可…

    Java 2023年5月19日
    00
  • Java 数据类型及类型转换的互相转换实例代码

    Java 是一门类型安全的编程语言,它的数据类型主要分为原始数据类型和引用数据类型两大类。其中,原始数据类型又可以分为四种整型、两种浮点型、一种字符型和一种布尔型。同时,Java 还提供了一些类型转换的工具类和语法来实现数据类型之间的转换。 一、Java 原始数据类型 Java 原始数据类型主要包括 byte、short、int、long、float、dou…

    Java 2023年5月26日
    00
  • java webservice上传下载文件代码分享

    下面是“java webservice上传下载文件代码分享”的完整攻略: 1. 准备工作 在开始实现文件上传下载的功能之前,我们需要准备好以下几点: 安装Java与Eclipse IDE开发环境; 下载并安装Apache Tomcat服务器; 导入JAX-WS 开发包,以便能够使用JAX-WS创建Webservice服务。 2. 创建文件上传下载的Webse…

    Java 2023年5月19日
    00
  • javaWeb 四大域对象详细介绍

    JavaWeb 四大域对象详细介绍 在 JavaWeb 中,有四个重要的域对象,分别是 应用程序域对象、会话域对象、请求域对象和页面域对象。这些域对象的作用是为了在 Web 应用程序中共享数据。 应用程序域对象 (ServletContext) 应用程序域对象是在整个 Web 应用程序中是共享的,存在于整个应用程序的生命周期中。根据 Servlet 规范,每…

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