sleep方法:
- sleep方法使当前线程暂停执行指定的时间,然后继续执行。
- 在线程休眠期间,它不会释放任何锁资源。
- sleep方法主要用于控制线程的执行速度或等待某个条件成立。
Thread.sleep(5000); // 休眠5秒钟
Thread t1 = new Thread(new Runnable() { @Override public void run() { System.out.println("线程1开始执行..."); try { Thread.sleep(5000); // 线程1休眠5秒钟 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程1执行结束..."); } }); t1.start(); // 启动线程1
wait方法:
- wait方法是Object类的一个方法,因此任何对象都可以调用它。
- wait方法使当前线程进入等待状态,并释放对象的锁,直到其他线程调用同一对象的notify()或notifyAll()方法来唤醒该线程。
- wait方法通常用于线程间的协作和同步。
synchronized (lock) { while (!condition) { lock.wait(); // 等待其他线程满足条件后唤醒 } // 执行任务 }
Object lock = new Object(); Thread t1 = new Thread(new Runnable() { @Override public void run() { synchronized (lock) { while (true) { try { lock.wait(); // 线程1等待其他线程唤醒它 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程1被唤醒,继续执行..."); } } } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { synchronized (lock) { System.out.println("线程2唤醒线程1..."); lock.notify(); // 线程2唤醒线程1 } } }); t1.start(); // 启动线程1 t2.start(); // 启动线程2
线程1进入等待状态,并释放对象的锁。然后线程2获取到对象的锁,并调用lock.notify()方法唤醒线程1。这样,线程1就被唤醒,并继续执行。
标签:Thread,lock,线程,new,多线程,唤醒,wait From: https://www.cnblogs.com/fengok/p/17914800.html