@Override
  public String toString() {
    lock.lock();
    try {
      return super.toString();
    } finally {
      lock.unlock();
    }
  }
Returns an array containing all of the elements in this deque, in
proper sequence; the runtime type of the returned array is that of
the specified array.  If the deque fits in the specified array, it
is returned therein.  Otherwise, a new array is allocated with the
runtime type of the specified array and the size of this deque.
<br>
If this deque fits in the specified array with room to spare
(i.e., the array has more elements than this deque), the element in
the array immediately following the end of the deque is set to
<pre>null</pre>.
<p>Like the {@link #toArray()} method, this method acts as bridge between
array-based and collection-based APIs.  Further, this method allows
precise control over the runtime type of the output array, and may,
under certain circumstances, be used to save allocation costs.
</p>
Suppose <pre>x</pre> is a deque known to contain only strings.
The following code can be used to dump the deque into a newly
allocated array of <pre>String</pre>:
<pre>
    String[] y = x.toArray(new String[0]);</pre>
<br>
Note that <pre>toArray(new Object[0])</pre> is identical in function to
<pre>toArray()</pre>.

@param a the array into which the elements of the deque are to
         be stored, if it is big enough; otherwise, a new array of the
         same runtime type is allocated for this purpose
@return an array containing all of the elements in this deque
@throws ArrayStoreException  if the runtime type of the specified array
                             is not a supertype of the runtime type of every element in
                             this deque
@throws NullPointerException if the specified array is null
llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/PriorityBlockingDeque.java