编写一个堆栈类MyStack,类中定义含5个元素的整型数组,并定义了两个同步(synchronized)方法:入栈操作方

如题所述

第1个回答  2011-04-26
public class MyStack {

private int buffer = -1;
private boolean oBuffer= false;

public synchronized void push( int k ) {
if (k<6){
String name = Thread.currentThread().getName();
while (oBuffer) {
try {
System.err.println( name
+ " 试图输出,但还没有压入!等待压入!" );
wait();
}
catch ( InterruptedException e ) {
e.printStackTrace();
}
}
buffer = k;
System.out.println( name+ "压入一个整数:"+buffer);
oBuffer=true;
notify();
}
else {
System.out.println( "已有五个整数,不能再压入!"+buffer);
}

}

public synchronized int pop() {
String name = Thread.currentThread().getName();
while (!oBuffer) {
try {
System.err.println( name + " 试图输出,但还没有压入!等待压入!" );
wait();
}
catch ( InterruptedException e ) {
e.printStackTrace();
}
}
oBuffer=false;
System.out.println( name+ " 输出一个整数:" + buffer);
notify();
return buffer;
}
}

public class Test{
public static void main( String [] args ) {
System.out.println("压入和输出的同步");
MyStack myStack = new MyStack();
Push push = new Push( myStack );
Output out = new Output( myStack );
push.start();
out.start();
}
}

public class Output extends Thread {
private MyStack myStack;
public Output(MyStack myStack) {
super( "弹出数据" );
this.myStack = myStack;
}
public void run(){
int sum = 0;
for ( int count = 1; count <= 20; count++ ) {
try {
Thread.sleep( ( int ) ( Math.random() * 2000 ) );
sum += myStack.pop();
}
catch ( InterruptedException e ) {
e.printStackTrace();
}
}
System.out.println( getName() + "消费的整数和:" + sum );
}
}

public class Push extends Thread {
private MyStack myStack;
public Push(MyStack myStack) {
super( "压入数据" );
this.myStack = myStack;
}
public void run() {
for (int count = 1; count <= 20; count++ ) {
try {
Thread.sleep( ( int ) ( Math.random() *200 ) );
myStack.push( count );
}
catch ( InterruptedException e ) {
e.printStackTrace();
}
}
}
}本回答被网友采纳
第2个回答  2011-05-02
这题运行结果是什么?
相似回答