【Java】生产者消费者模式
设计一个生产电脑和搬运电脑类,要求生产出一台电脑就搬走一台电脑,如果没有新的电脑生产出来,则搬运工要等待新电脑产出;如果生产出的电脑没有搬走,则要等待电脑搬走之后再生产,并统计出生产的电脑数量。
package chapter9;
public class Job2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Computer c = new Computer();
Producer pro = new Producer(c);
Carrier car = new Carrier(c);
new Thread(pro).start();
new Thread(car).start();
}
}
class Computer
{
private String name = "dell";
private String version = "1";
private static int num = 1;
public static int getNum() {
return num;
}
public static void setNum(int num) {
Computer.num = num;
}
private boolean flag = false;
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public synchronized void set(String name,String version)
{
if(!flag)
{
try {
super.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.setName(name);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.setVersion(version);
this.setNum(num+1);
flag = false;
super.notify();
}
public synchronized void get()
{
if(flag)
{
try {
super.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(this.getName()+"-->"+this.getVersion()+"-->"+Computer.getNum());
flag=true;
super.notify();
}
}
class Producer implements Runnable
{
private Computer c = null;
public Producer(Computer c) {
//super();
this.c = c;
}
public void run()
{
boolean flag=false;
for(int i = 0; i < 50; i++)
{
if(flag)
{
this.c.set("dell","1");
flag = false;
}
else
{
this.c.set("hp","2");
flag = true;
}
}
}
}
class Carrier implements Runnable
{
private Computer c = null;
public Carrier(Computer c) {
//super();
this.c = c;
}
public void run()
{
for (int i = 0; i < 50; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.c.get();
}
}
}
请你务必,一而再,再而三,三而不竭,千次万次,毫不犹豫地救自己于这世间水火。
笔者将不定期更新【考研或就业】的专业相关知识以及自身理解,希望大家能【关注】我。
如果觉得对您有用,请点击左下角的【点赞】按钮,给我一些鼓励,谢谢!
如果有更好的理解或建议,请在【评论】中写出,我会及时修改,谢谢啦!
笔者将不定期更新【考研或就业】的专业相关知识以及自身理解,希望大家能【关注】我。
如果觉得对您有用,请点击左下角的【点赞】按钮,给我一些鼓励,谢谢!
如果有更好的理解或建议,请在【评论】中写出,我会及时修改,谢谢啦!
本文来自博客园,作者:Nemo&
转载请注明原文链接:https://www.cnblogs.com/blknemo/p/10020240.html
顶
关注
评论
收藏