老师,我的代码运行时只会单线程的跑?好像是出现了死锁的情况,检查不出问题,请老师帮我看看哪里出错了?
package 线程冲突3;
public class ProduceTestThread {
public static void main(String[] args) {
SyncStack ss=new SyncStack();
new shengChang(ss).start();
new xiaoFei(ss).start();
}
}
/**
* 馒头类
*/
class manTou{
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
/**
* 缓冲区
*/
class SyncStack{
//定义放馒头的盒子
manTou []mtArr=new manTou[10];
//定义取馒头的盒子
int index;
/**
* 放馒头的方法
*/
public synchronized void fang(manTou mt){
while(index==mtArr.length){
try {
wait();
/* notify();*/
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
mtArr[index]=mt;
index++;
}
/**
* 取馒头的方法
*/
public synchronized manTou qu(int index){
/*System.out.println("测试:进去取");*/
while(index==0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
this.index--;
return mtArr[this.index];
}
}
/**
* 生产者线程
*/
class shengChang extends Thread{
private SyncStack ss;
shengChang(SyncStack ss){
this.ss=ss;
}
@Override
public void run() {
for(int i=0;i<10;i++){
manTou mt=new manTou();
ss.fang(mt);
ss.mtArr[i].setId(i+1);
System.out.println("生产馒头:"+ss.mtArr[i].getId());
}
/*System.out.println("共计生产了馒头"+sum+"个");*/
}
}
/**
* 消费者线程
*/
class xiaoFei extends Thread{
private SyncStack ss;
xiaoFei(SyncStack ss){
this.ss=ss;
}
@Override
public void run() {
for(int i=0;i<10;i++){
ss.qu(i);
System.out.println("消费馒头:"+ss.mtArr[i].getId());
/*manTou mt = ss.qu(i);
System.out.println("消费馒头"+mt.getId());*/
}
}
}