Question 7 [8]
Consider the following class and answer the questions below
it:
public class StackWithGuard extends Stack {
public StackWithGuard(int size) {
super(size);
}
synchronized public boolean isEmpty() {
return super.isEmpty();
}
synchronized public boolean isFull() {
return super.isFull();
}
synchronized public int getSize() {
return super.getSize();
}
synchronized public void push(Object obj) {
try {
while (isFull()) {
wait();
}
} catch (InterruptedException e) {}
super.push(obj);
COS2144/102
11
notify();
}
synchronized public Object pop() {
try {
while (isEmpty()) {
wait();
}
} catch (InterruptedException e) {}
Object result = super.pop();
notify();
return result;
}
public static void main(String args[]) {
StackWithGuard stack = new StackWithGuard(5);
new Producer(stack, 15).start();
new Consumer(stack, 15).start();
}
}
Note: The Stack class is provided in the Appendix.
Note also: The following questions all refer to the pop()
method of the StackWithGuard
class given above.
7.1 What does the synchronized keyword ensure for this
method? (2)
7.2 Why is a while loop used to test whether the stack is
empty? In other words, why
wouldn't the following if statement be sufficient?
if (isEmpty()) {
wait();
}
(2)
7.3 Why is the result of popping (provided by the inherited
pop() method) stored in a
temporary variable? In other words, why wouldn't the
following statement be
sufficient?
return super.pop();
(2)
7.4 Why is the while loop placed in a try-catch structure?
(2)
Appendix
The LinkedQueue class:
public class LinkedQueue implements Queue {
private Node first, last;
private int count;
public LinkedQueue() {
first = last = null;
count =0;
}
public int size() {
return count;
}
public boolean isEmpty() {
return (count == 0);
12
}
public void enqueue(Object o) {
Node node = new Node();
node.element = o;
node.next = null;
node.prev = last;
if (last != null){
last.next = node;
}
else {
last = first = node;
}
last = node;
count++;
}
public void dequeue() {
if ((first!= null) & (first.next!=null)) {
first = first.next;
first.prev = null;
count--;
}
else {
first = last = null;
count--;
}
}
public Object front() {
return first;
}
}
class Node {
Object element;
Node next, prev;
}
The Stack class:
public class Stack {
protected Object rep[];
protected int top = -1;
protected int size = 0;
protected int count = 0;
public Stack(int size) {
if (size > 0) {
this.size = size;
rep = new Object[size];
}
}
public boolean isFull() {
return (count == size);
}
public boolean isEmpty() {
return (count == 0);
}
public int getSize() {
return size;
}
public void push(Object e) {
if (e != null && !isFull()) {
COS2144/102
13
top++;
rep[top] = e;
count ++;
}
}
public Object pop() {
Object result = null;
if (!isEmpty()) {
result = rep[top];
top--;
count--;
}
return result;
}
}
No Answer is Posted For this Question
Be the First to Post Answer
Define package in Java.
Why is java called java?
What is overriding in java?
In real time project which driver did u use? What is the main functionality of the Prepared Statement?
Differentiate between class and structure.
How do you sort a string in alphabetical order in java?
What is the difference between notify and notifyall method?
Java openings 3 - 5 years, Lnt Infotech. requirements - core java, J2ee, struts, hibernate Interview Date:- 19 March 2011 Time:- 9:00 AM to 12:00 Pm Interview Location - L & T Infotech, Manapakkam, Chennai Refererral PS NO:- 291649 (Please mention this when u fill the form only then u will be considered for interview) Documents Required:- Latest Resume, Photograph and last 3 payslips Mail me on vasan2211@gmail.com once u appear for interview
What are actual parameters?
What is the java virtual machine?
Which is better arraylist or vector?
What is stack class in java?