包知道1;
導入Java . util . linked list;
公共類堆棧
{
LinkedList & ltObject & gts=new LinkedList<。Object & gt();
公共void推送(對象o)
{
已同步{
s . push(o);
}
}
公共對象pop()
{
如果(!s.isEmpty())
已同步{
返回s . pop();
}
其他
返回null
}
public boolean isEmpty()
{
返回s . isempty();
}
}
//生產類
公共類生成器實現Runnable
{
堆棧s;
公共產品(堆棧)
{
this.s = s
}
公共無效運行()
{
for(int I = 0;我& lt200;i++)
{
int tem =(int)(math . random()* 1000);
s . push(tem);
系統。out.println(線程。currentthread()。getname ()+"棧上的數據是:"+tem);
嘗試
{
thread . sleep(600);
} catch(中斷異常e)
{
// TODO自動生成的catch塊
e . printstacktrace();
}
}
}
}
//消費者類別
公共類Consume實現Runnable
{
堆棧s;
公共消費者(堆棧)
{
super();
this.s = s
}
公共無效運行()
{
for(int I = 0;我& lt200;i++)
{
如果(!s.isEmpty())
系統。out . println(thread . current thread()。getname ()+"提取的數據是:"+s . pop());
嘗試
{
thread . sleep(500);
} catch(中斷異常e)
{
// TODO自動生成的catch塊
e . printstacktrace();
}
}
}
}
//測試類
公共類TestProCon
{
公共靜態void main(String[] args)
{
Stack s = new Stack();
Thread Producter 1 =新線程(新的產品);
線程生成器2 =新線程(新生成器);
producter 1 . setname(" producter 1 ");
producter 2 . setname(" producter 2 ");
線程消耗1 =新線程(新消耗);
線程消耗2 =新線程(新消耗);
線程消耗3 =新線程(新消耗);
consume 1 . setname(" consume 1 ");
consume 2 . setname(" consume 2 ");
consume 3 . setname(" consume 3 ");
producter 1 . start();
producter 2 . start();
consume 1 . start();
consume 2 . start();
consume 3 . start();
}
}