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而不是其他方法?它们有什么优势?
免责声明:本站内容仅用于学习参考,信息和图片素材来源于互联网,如内容侵权与违规,请联系我们进行删除,我们将在三个工作日内处理。联系邮箱:chuangshanghai#qq.com(把#换成@)