您的位置:首页 > 编程语言 > Java开发

Java 线程同步 生产消费问题

2016-04-11 11:34 363 查看
class  SynStack
{
int index=0;   //表示数组有效元素个数
char[] data = new char[6];
public synchronized  void push(char c)
{
while(index==data.length)  //data.length=6
{
try
{
this.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
this.notify();
data[index]=c;
index++;
System.out.println("正在生产第"+index+"商品"+data[index-1]);
}


public synchronized char pop()
{
while(index==0)
{
try
{
this.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
this.notify();
index--;
System.out.println("正在消费第"+(index+1)+"商品"+data[index]);
return data[index];
}
}


class Producer implements Runnable
{
SynStack s;
public   Producer(SynStack s)
{
this.s=s;
}
@Override
public void run()
{
for(int i=0;i<20;i++)
{
s.push((char)('a'+i));
}
}
}


class Consumer implements Runnable
{
SynStack s;
public Consumer(SynStack s)
{
this.s=s;
}
public void run()
{
for(int i=0;i<20;i++)
{
s.pop();
}
}
}


public class Test
{
private static final int key = 0;
public static void main(String[] args)
{
SynStack ss = new SynStack();
Producer p = new Producer(ss);
Consumer c = new Consumer(ss);
Thread t1 = new Thread(p);
Thread t2 = new Thread(c);
t1.start();
t2.start();
int key=1;
switch(key)
{
case 1:System.out.println("aa");
break;
default:
break;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: