A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1,主要是通道的区别
Guarded Suspension Pattern 通道是有LinkedQueue 组成,
他的通道是自动化的通道。
一,长度可以无限增加。
二,每次取出只需要removeFirst()直接从头部取出,元素自动往前移动,
三,每次添加元素,只需要调用put(Element e)就能向末尾添加元素

而Producer Consumer Pattern 通道是有自定义的数组组成
所以他必须做到更严格的控制
一,首先他的数组长度是确定的
二,必须定义一个count,

防止出现数组内put元素覆盖了未取出的元素,
每次put,count++ 不能超过arr.length

防止出现数组内出现get了重复的元素,
每次get,count-- 不能低于0

三,定义一个tail 用来表示取出元素的下标
每次取出元素 tail++/arr.length
四,定义一个head 用来表示放进元素的下标
每次取出元素 head++/arr.length

2.在Guarded Suspension Pattern中本来是2线程抽取,添加,后来本人也尝试了多线程,并且得出在wait()中被唤醒的线程,和其他线程无优先级区别

3.在Guarded Suspension Pattern中由于通道长度不受控制,如果在添加线程大大大于抽取线程的时候,不建议使用,这样会造成内存的负担,有可能会照成内存溢出,而Producer Consumer Pattern就可以避免内存的负担,但是可能会影响效率

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马