User Tools

Site Tools


lab7

Lab 7

In this lab, we consider a concurrent stack. We start from the following skeleton of a sequential stack. Note that the class Stack does not implement a stack correctly.

/**
 * A stack.  It stores integers.
 *
 * @author
 */
public class Stack {
  private int[] content;
  private int size;
 
  /*
   * The maximal number of integers that can be stored in a stack.
   */
  private final static int CAPACITY = 5;
 
  /**
   * Initializes this stack to be empty.
   */
  public Stack() {
    this.content = new int[Stack.CAPACITY];
    this.size = 0;
  }
 
  /**
   * Pushes the given integer onto this stack.
   *
   * @param value the integer to be pushed onto this stack.
   */
  public void push(int value) {
    this.content[this.size] = value;
    this.size++;
    System.out.printf("Push %d\n", value);
  }
 
  /**
   * Pops the top of this stack and returns the integer.
   *
   * @return the top of this stack.
   */
  public int pop() {
    this.size--;
    int value = this.content[this.size];
    System.out.printf("Pop %d\n", value);
    return value;
  }
}

Implement the following classes.

  • The class Pusher. Each Pusher object is a Thread that pushes the integers 0, 1, …, 9 onto a stack. The stack is provided as an argument to the constructor of the Pusher class. The jar file pop.jar contains the class Popper. Each Popper object is a Thread that pops ten integers from a stack. The stack is provided as an argument to the constructor of the Popper class.
  • The class Stack. This class is based on the above skeleton and allows Threads to concurrently call the push and pop methods on the stack.
  • The class Main. This class only contains a main method. In the main method, a number of Popper and Pusher objects are created (for example, 10 Poppers and 5 Pushers) and all these Threads are run concurrently.

To receive feedback, submit your code using the submit command:

submit 4315 lab7 <name of class>.java
lab7.txt · Last modified: 2018/03/11 23:19 by franck