网站推广.NET

网站推广.NET

java中的sleep和wait怎么使用

来源:互联网

Java中的sleep和wait怎么使用

在Java中,sleep和wait都是用于控制线程执行的关键字,它们可以让当前线程暂停一段时间,让其他线程有机会执行,下面我们分别介绍这两个方法的使用。

1、sleep方法

sleep方法是Thread类的一个静态方法,它可以让当前线程暂停指定的时间(以毫秒为单位),当时间到达后,线程会自动恢复执行,这个方法通常用于让线程暂停一段时间,以便给其他线程执行的机会。

语法:

public static void sleep(long millis) throws InterruptedException;

参数:

millis:需要暂停的时间,以毫秒为单位。

示例代码:

public class SleepDemo {    public static void main(String[] args) {        System.out.println("程序开始执行");        try {            Thread.sleep(3000); // 让当前线程暂停3秒(3000毫秒)        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("程序恢复执行");    }}

2、wait方法

wait方法是Object类的一个实例方法,它可以让当前线程等待,直到其他线程调用此对象的notify()或notifyAll()方法,当另一个线程调用这些方法时,当前线程会被唤醒并继续执行,wait方法通常用于等待某个条件成立,例如等待一个线程完成任务。

语法:

public synchronized void wait() throws InterruptedException;public synchronized void wait(long timeout) throws InterruptedException;public synchronized void wait(long timeout, int nanos) throws InterruptedException;

参数:

timeout:等待的最长时间,以毫秒为单位,如果设置为-1,则表示无限期等待。

nanos:可选参数,表示等待的最短时间内的纳秒数,如果设置为-1,则表示使用默认值。

示例代码:

public class WaitDemo {    public static void main(String[] args) {        Object lock = new Object();        Thread thread1 = new Thread(() -> {            synchronized (lock) {                System.out.println("线程1开始执行");                try {                    lock.wait(); // 让当前线程等待,直到其他线程调用notify()或notifyAll()方法                } catch (InterruptedException e) {                    e.printStackTrace();                } finally {                    System.out.println("线程1结束执行");                }            }        });        Thread thread2 = new Thread(() -> {            synchronized (lock) {                System.out.println("线程2开始执行");                try {                    Thread.sleep(1000); // 让当前线程暂停1秒(1000毫秒)                } catch (InterruptedException e) {                    e.printStackTrace();                } finally {                    System.out.println("线程2通知线程1可以继续执行");                    lock.notify(); // 唤醒等待的线程1                }            }        });        thread1.start(); // 启动线程1        thread2.start(); // 启动线程2,并在1秒后通知线程1可以继续执行    }}

相关问题与解答

1、为什么使用sleep和wait而不是其他方法?它们有什么优势?

javasleep