生产者与消费者小例子

来源:互联网 发布:机顶盒桌面软件 编辑:程序博客网 时间:2024/04/29 18:05
package 生产者与消费者;public class FoodClass {//food是共享的资源private String food;//当cooker为false,表示锅不是空的private boolean cooker = false;public FoodClass() {}public synchronized void set(String food) {if(!cooker) {try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}} this.food = food;this.cooker = false;this.notify();}public synchronized void get() {if(cooker) {try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(food);this.cooker = true;this.notify();}}
package 生产者与消费者;public class SetFoodClass implements Runnable{<span style="white-space:pre"></span><span style="white-space:pre"></span>private FoodClass fc;<span style="white-space:pre"></span>private int x = 0;<span style="white-space:pre"></span><span style="white-space:pre"></span>public SetFoodClass(FoodClass fc) {<span style="white-space:pre"></span>this.fc = fc;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>public void run() {<span style="white-space:pre"></span>// TODO Auto-generated method stub<span style="white-space:pre"></span>while(true) {<span style="white-space:pre"></span>if(x % 2 != 0) {<span style="white-space:pre"></span>fc.set("吃饭!!!!!!!!!!!!!!!!!!!!!!!");<span style="white-space:pre"></span>} else {<span style="white-space:pre"></span>fc.set("喝粥!");<span style="white-space:pre"></span>}<span style="white-space:pre"></span>x++;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>}}
package 生产者与消费者;public class GetFoodClass implements Runnable{<span style="white-space:pre"></span><span style="white-space:pre"></span>private FoodClass fc;<span style="white-space:pre"></span><span style="white-space:pre"></span>public GetFoodClass(FoodClass fc) {<span style="white-space:pre"></span>this.fc = fc;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>public void run() {<span style="white-space:pre"></span>// TODO Auto-generated method stub<span style="white-space:pre"></span>while(true) {<span style="white-space:pre"></span>fc.get();<span style="white-space:pre"></span>}<span style="white-space:pre"></span>}<span style="white-space:pre"></span>}
package 生产者与消费者;public class TestClass {<span style="white-space:pre"></span><span style="white-space:pre"></span>public static void main(String[] args) {<span style="white-space:pre"></span><span style="white-space:pre"></span>FoodClass fc = new FoodClass();<span style="white-space:pre"></span><span style="white-space:pre"></span>SetFoodClass sfc = new SetFoodClass(fc);<span style="white-space:pre"></span>GetFoodClass gfc = new GetFoodClass(fc);<span style="white-space:pre"></span><span style="white-space:pre"></span>Thread th1 = new Thread(sfc);<span style="white-space:pre"></span>Thread th2 = new Thread(gfc);<span style="white-space:pre"></span><span style="white-space:pre"></span>th1.start();<span style="white-space:pre"></span>th2.start();<span style="white-space:pre"></span>}}


主要是锁关键字synchronized和wait()还有notify()的使用,访问同一资源用同一把锁才可以。

后来想使用计时器来实现,可是发现程序却死在那里了,不知道为什么,下次再尝试吧。

0 0
原创粉丝点击