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日

相关文章

  • 10个Java程序员熟悉的面向对象设计原则

    为了让Java程序员编写高质量的面向对象代码,需要了解并应用常见的面向对象设计原则。下面介绍的是10个Java程序员熟悉的面向对象设计原则的完整攻略。 1. 单一职责原则(SRP) 单一职责原则规定一个类只有一个职责,即一个类只负责实现单一的功能。如果一个类承担了多个职责,则这个类变得难以修改,测试和复用,会导致代码的混乱和不可维护性。 示例说明:例如,假设…

    Java 2023年5月26日
    00
  • java图形界面编程实战代码

    Java图形界面编程是Java中一个重要的领域,Java程序员需要掌握相关技能才能实现优秀的GUI程序。下面是实战Java图形界面编程的完整攻略: 1. 确定开发工具 在开始编写Java图形界面程序之前,程序员需要选择合适的开发工具。常用的Java GUI开发工具包括Swing、JavaFX、AWT等,同时还需要选择Java IDE,如Eclipse、Int…

    Java 2023年5月23日
    00
  • java中字符串参数化符号${}的解析

    在Java中,字符串参数化符号${}是用于字符串模板中的占位符,可以在占位符中插入变量名,并在运行时将其动态替换为相应的值。 下面是解析${}的基本过程: 识别占位符 在字符串中找到${的位置,表示占位符开始。 识别变量名 在占位符中寻找变量名,变量名可以是任意的合法Java标识符。 识别默认值 如果占位符中包含默认值,使用冒号 : 来和变量名分隔。默认值是…

    Java 2023年5月26日
    00
  • Spring Boot 静态资源处理方式

    下面是Spring Boot静态资源处理方式的完整攻略: 一、什么是Spring Boot静态资源处理方式 Spring Boot是一个快速开发框架,它提供了非常方便的静态资源处理方式,可以让我们轻松地管理Web应用程序的静态资源,包括CSS、JavaScript、图片等。静态资源可以是Web应用程序的可执行程序之外的文件。静态资源可以存储在文件系统中,也可…

    Java 2023年6月15日
    00
  • JDK9对String字符串的新一轮优化

    本次讲解将从以下几个方面详细讲解JDK9对String字符串的新一轮优化: 1.记录String字符串的byte数组2.String字符串的实现方式升级到Compact String3.使用try-with-resources自动关闭资源4.String的重复操作5.示例说明 1. 记录String字符串的byte数组 在JDK9中,String字符串可以记…

    Java 2023年5月27日
    00
  • IDEA 离线迁移Springboot工程的方法步骤

    下面我将为你详细讲解“IDEA 离线迁移Springboot工程的方法步骤”的攻略。 一、离线环境准备 在没有网络的情况下,我们需要先将工程所需的依赖预先下载到本地。具体的步骤如下: 首先在有网络的环境下,利用 maven 将所需的依赖下载到本地。在控制台执行命令: mvn dependency:copy-dependencies 这会将所需依赖下载到${b…

    Java 2023年5月20日
    00
  • java通过实例了解值传递和引用传递

    首先,需要理解Java中两种数据类型传递方式:值传递和引用传递。值传递是指在方法调用时传递的是实际的值,而引用传递则是指传递的是对象的引用。 值传递(Value Passing) Java中的基本数据类型,如int、float、boolean等都是通过值传递的方式进行传递。这意味着,当你将一个基本数据类型作为参数传递给一个方法时,它会复制参数的值,并将其传递…

    Java 2023年5月27日
    00
  • JSP+Ajax 添加、删除多选框

    下面是关于“JSP+Ajax 添加、删除多选框”的攻略。 什么是JSP+Ajax 添加、删除多选框 在 JSP 页面中,我们可以使用多选框来实现批量操作功能。但是,如果想要实现添加、删除选项的功能,通常需要使用 JavaScript 或 JQuery 等客户端脚本。这种方式需要刷新页面才能看到结果,用户体验不好。 而使用 Ajax 技术,则可以通过后台动态更…

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