public boolean push(E item) {
		if(item == null) {
			return false;
		}
		
		synchronized(lock) {
			if(stack.size()>=capacity) {
				System.out.println("Reach maximum capacity...");
				return false;
			}
			
			// Insert item into stack
			stack.push(item);
			
			// Prepare max stack
			if(maxStack.isEmpty()) {
				maxStack.push(item);
			} else {
				E currMaxItem = maxStack.peek();
				if(item.compareTo(currMaxItem) >= 0) {
					maxStack.push(item);
				}
			}
			
			if(minStack.isEmpty()) {
				minStack.push(item);
			} else {
				E min = minStack.peek();
				if(item.compareTo(min) <= 0) {
					minStack.push(item);
				}
			}
			
			return true;
		}
	}