Suspention——要等到我准备好哦

it2022-05-05  66

定义: 当现在并不适合马上执行某个操作,要求想要执行该操作的线程等待。 Request:表示“请求”的类。      一个只有存放名字的类     private final String name;的get和set方法 RequestQuery:依次存放请求以待使用的类。     getRequest和putRequest方法

 

一、 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

相关资源:数据结构—成绩单生成器

最新回复(0)