时间:2022-09-05 14:01:43来源:网络整理
问题介绍:
仓库存放 100 种产品
生产者线程:
判断仓库是否满了,如果满了,等待——(仓库有位置)
如果仓库未满,
将生产的产品放入仓库----1个仓库有一个产品cpu没了
输出仓库中的产品数量----3,应该输出数量1,但此时仓库数量为0
通知仓库有产品
消费者线程:
判断仓库是否为空,如果为空,等待-(仓库中有产品)
如果仓库是空的,
从仓库取出一个产品-------- 2 仓库没有产品c#生产消费者问题,cpu去
输出仓库中的产品数量
通知仓库位置
问题分析:
对于生产者,执行1,cpu时间片到达,
消费者线程开始执行直到2,cpu时间片到达
生产者线程开始执行,输出仓库数为0,显然与现实不符。刚刚放入的产品数量不能为0。
解决方案:
生产者和消费者必须同步访问存储库。也就是说c#生产消费者问题,在生产者访问仓库的过程中,如果没有结束,消费者就无法访问仓库,否则容易出现上述问题。
//消费者
package Day20;
public class Consumer extends Thread{
public void run() {
while (true) {
synchronized (PandCTest.lock) {
if (PandCTest.cangku.size()==0) {
try {
PandCTest.lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
PandCTest.cangku.remove(0);
System.out.println("remove noe is: "+PandCTest.cangku.size());
PandCTest.lock.notify();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//生产者
package Day20;
public class Producer extends Thread{
public void run() {
while (true) {
synchronized (PandCTest.lock) {
if (PandCTest.cangku.size()==PandCTest.MAX_NUM) {
try {
PandCTest.lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
PandCTest.cangku.add("cp");
System.out.println("add now is: "+PandCTest.cangku.size());
PandCTest.lock.notify();
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package Day20;
import java.util.ArrayList;
import java.util.List;
public class PandCTest {
public static final int MAX_NUM=50;
public static final Object lock = new Object();
public static List<String> cangku = new ArrayList<String>();
public static void main(String[] args) {
Producer pr = new Producer();
Consumer co = new Consumer();
pr.start();
co.start();
}
}
声明:文章仅代表原作者观点,不代表本站立场;如有侵权、违规,可直接反馈本站,我们将会作修改或删除处理。
图文推荐
2022-09-05 14:01:36
2022-09-05 13:01:13
2022-09-05 12:10:02
2022-09-05 12:01:49
2022-09-05 11:10:15
2022-09-05 10:10:05
热点排行
精彩文章
2022-09-05 13:10:16
2022-09-05 09:02:44
2022-09-04 14:02:05
2022-09-04 10:01:54
2022-09-03 14:01:25
2022-09-03 12:01:55
热门推荐