Java通过线程如何解决生产者/消费者问题

  

Java通过线程如何解决生产者/消费者问题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示

癑ava通过线程如何解决生产者/消费者问题"

生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况:

存储空间已满,而生产者占用着它,消费者等着生产者让出空间从而去除产品,生产者等着消费者消费产品,从而向空间中添加产品。互相等待,从而发生死锁。

以下实例演示了如何通过线程解决生产者/消费者问题:

/*   作者通过javaidea.com   ProducerConsumerTest.java   */公开课ProducerConsumerTest {   公共静态void main (String [] args) {   舒适的c=new舒适();   生产者p1=new (c, 1);   消费者c1=新的消费者(c, 1);   p1.start ();   c1.start ();   }   }   类文件架{   私人int内容;   私人布尔可用=false;   公共同步int get () {   而(可用==false) {   尝试{   wait ();   }   抓住(InterruptedException e) {   }   }   可用=false;   notifyAll ();   返回内容;   }   公共同步空白把(int值){   而(可用==true) {   尝试{   wait ();   }   抓住(InterruptedException e) {   }   }   内容=价值;   可用=true;   notifyAll ();   }   }      类消费扩展线程{   私人舒适的舒适;   私人int数;   公共消费(舒适的c, int数){   舒适的=c;   这一点。数量=数量;   }   公共空间run () {   int值=https://www.yisu.com/zixun/0;   for (int i=0;我<10;我+ +){   值=cubbyhole.get ();   system . out。println(“消费者#”+。数量+“:”+价值);   }   }   }      类生产商延伸线程{   私人舒适的舒适;   私人int数;      公共生产商(舒适的c, int数){   舒适的=c;   这一点。数量=数量;   }      公共空间run () {   for (int i=0;我<10;我+ +){   cubbyhole.put(我);   system . out。println(“生产者#”+。数量+“:”+ i);   尝试{   睡眠((int) (math . random () * 100));   }捕捉(InterruptedException e) {}   }   }   }

以上代码运行输出结果为:

消费者# 1有:0
生产者# 1说:0
生产者# 1将:1
消费者# 1有:1
生产者# 1说:2
消费者# 1有:2
生产者# 1说:3
消费者# 1有:3
生产者# 1说:4
消费者# 1有:4
生产者# 1说:5
消费者# 1有:5
生产者# 1说:6
消费者# 1有:6
生产者# 1说:7
消费者# 1有:7
生产者# 1说:8
消费者# 1有:8
生产者# 1说:9
消费者# 1有:9

看完上述内容,你们掌握Java通过线程如何解决生产者/消费者问题的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

Java通过线程如何解决生产者/消费者问题