Java Thread.wait方法
来源:互联网 发布:查看电脑mac地址命令 编辑:程序博客网 时间:2024/05/22 12:14
Java Thread.wait方法
wait()方法
必须要获得该对象的锁,才能运行,否则会报IllegalMonitorStateException的异常。
try {Object lock = new Object();synchronized (lock) {lock.wait();}} catch (InterruptedException e) {e.printStackTrace();}
进入wait()方法后,会自动放弃获得的对象锁供其他使用。
public class ThreadWait {public static void main(String[] args) {try {Object lock = new Object();new ThreadA(lock).start();Thread.sleep(1000);new ThreadNotify(lock).start();} catch (InterruptedException e) {e.printStackTrace();}}static class ThreadA extends Thread {private Object lock;public ThreadA(Object lock) {this.lock = lock;}public void run() {synchronized (lock) {try {System.out.println("In ThreadA begin at " + System.currentTimeMillis());Thread.sleep(3000);lock.wait();System.out.println("In ThreadA end at " + System.currentTimeMillis());} catch (InterruptedException e) {e.printStackTrace();}}}}static class ThreadNotify extends Thread {private Object lock;public ThreadNotify(Object lock) {this.lock = lock;}public void run() {synchronized (lock) {System.out.println("In ThreadNotify begin at " + System.currentTimeMillis());lock.notify();System.out.println("In ThreadNotify end at " + System.currentTimeMillis());}}}}
线程A在三秒后进入等待状态,并放弃lock的锁。线程Notify在三秒后才能拿到lock的锁,并唤醒线程A。
In ThreadA begin at 1476323856874In ThreadNotify begin at 1476323859875In ThreadNotify end at 1476323859875In ThreadA end at 1476323859875
wait(long)方法
wait()方法会一直等待,直至被唤醒,而wait(long)方法,在指定时间后会进入就绪状态,重新运行。
public class ThreadWait {public static void main(String[] args) {try {Object lock = new Object();new ThreadA(lock).start();Thread.sleep(2000);new ThreadNotify(lock).start();Thread.sleep(1000);new ThreadB(lock).start();} catch (InterruptedException e) {e.printStackTrace();}}static class ThreadA extends Thread {private Object lock;public ThreadA(Object lock) {this.lock = lock;}public void run() {synchronized (lock) {try {System.out.println("In ThreadA begin at " + System.currentTimeMillis());lock.wait(3000);System.out.println("In ThreadA end at " + System.currentTimeMillis());} catch (InterruptedException e) {e.printStackTrace();}}}}static class ThreadB extends Thread {private Object lock;public ThreadB(Object lock) {this.lock = lock;}public void run() {synchronized (lock) {try {System.out.println("In ThreadB begin at " + System.currentTimeMillis());lock.wait(3000);System.out.println("In ThreadB end at " + System.currentTimeMillis());} catch (InterruptedException e) {e.printStackTrace();}}}}static class ThreadNotify extends Thread {private Object lock;public ThreadNotify(Object lock) {this.lock = lock;}public void run() {synchronized (lock) {lock.notify();}}}}
线程A虽然设置了等待3秒,但在2秒后被提前唤醒。而线程B没有被提前唤醒,所以在3秒后自己停止等待。
In ThreadA begin at 1476325715819In ThreadA end at 1476325717820In ThreadB begin at 1476325718820In ThreadB end at 1476325721821
0 0
- Java Thread.wait方法
- Java多线程学习 (三) Thread的wait()方法执行
- java object的wait和Thread的sleep方法区别
- java object的wait和Thread的sleep方法区别
- java object的wait和Thread的sleep方法区别
- java.lang.Thread.sleep()方法和java.lang.Object.wait()方法之间的区别
- java.lang.Thread.sleep()方法和java.lang.Object.wait()方法的区别--有道笔记整理
- java.lang.Thread.sleep()方法和java.lang.Object.wait()方法之间的区别
- 浅谈Java多线程中的Thread.sleep()和wait()方法的区别
- Java Thread sleep和wait的区别
- Java Thread sleep和wait的区别
- Java Thread wait, notify and notifyAll Example
- Java 线程 sleep wait 深入解析 Thread
- Java Thread wait, notify和notifyAll示例
- java thread中的wait()和notify()
- Java中的wait方法
- Java Object.wait()方法
- 关于Java wait()方法
- 如何关闭enhanced security configuration
- Unity3D之如何将包大小减少到极致
- 移动端导航的七种设计模式
- 如何日志备份还原
- 香港喜运佳的好,毋庸置疑
- Java Thread.wait方法
- Java并发编程:Callable、Future和FutureTask
- deep learning 中的正则化之drop
- Android如何防止apk程序被反编译
- jsp页面判断已是默认收货地址不再显示设为默认
- WOPI host消息体结构
- install haroopad on linux by tar.gz
- biginteger转Long
- "build gradle project info" Android Studio 导入Gradle工程时引发该问题的解决办法