一、 getRequest时如果queue的size小于0就会等待,putRequest的notifyAll就是唤醒那个等待。 二、 这里这个size的判断很重要,因为操作LinkedList的removeFirst方法,如果LinkedList里面一个元素都没有的话,就会抛出NoSuchElementException异常。 因此size>0这种必须要满足的条件,称为Guarded Suspension Pattern的警戒条件,这里靠while保证警戒条件一定会成立。 三、 调用wait后的线程,除非被notify/notifyAll,不然都会在等待里持续等待的状态。 此处线程是不想等待的,线程在等待的是实例状态的变化。 当了解线程在等待什么,就知道何时该调用notify、notifyAll了。 CientThread:动态送出请求的类。 包含ClientThread类的实例。会不断调用putRequest。
ServerThread:接受请求的类。
Main类
程序运行结果
Synchronized的意义 getRequest和putRequest都是synchronized方法。 看到Synchronized就要想到它是在保护什么????? 这个Synchronized是在保护LinkedList实例的queue字段。 Wait与锁定 _____________________示例到此结束_____________________ Guarded Suspension Pattern的所有参与者(就只有一个): GuardedObject被防卫的对象
___________________扩展______________________________
————————————————练习————————————————————————问题3.4
转载于:https://www.cnblogs.com/wzdnwyyu/p/11156768.html
相关资源:数据结构—成绩单生成器