@Override
  public void run() {
    while (threadRunFlag) {
      if (queue.isEmpty()) {
        System.out.println("wait add new Data to upload thread!");
        synchronized (this) {
          try {
            wait();
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }

      } else {
        Entity entity = (Entity) queue.remove();
        System.out.println("current upload is:" + entity.toString());
        System.out.println("list size i s :" + queue.size());

        try {
          Thread.sleep(300);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
  }
 /**
  * Returns an array of movies in the same order they they are in the queue but shares no data with
  * the actual queue.
  *
  * @pre
  * @post the array of movies will be returned in the order fo the queue
  * @return the array of movies
  */
 public Movie[] displayMoviesAtHome() {
   @SuppressWarnings("deprecation")
   MyQueue<Movie> cloneOfP = new MyQueue<Movie>(atHomeQueue);
   Movie[] movieList = new Movie[cloneOfP.getSize()];
   int i = 0;
   while (!cloneOfP.isEmpty()) {
     movieList[i] = cloneOfP.dequeue();
     i++;
   }
   return movieList;
 }
 public static void main(String[] args) {
   Solution34 sol34 = new Solution34();
   int[] values = new int[] {11, 34, 2, 6, 23, 5, 10};
   System.out.print("Create the queue: ");
   MyQueue queue = sol34.new MyQueue(values);
   sol34.printOutQueue(values);
   System.out.print("Remove three elements: ");
   for (int i = 0; i < 3; i++) {
     System.out.print(queue.remove() + "  ");
   }
   System.out.println();
   System.out.print("Peek the next element: ");
   System.out.print(queue.peek());
   System.out.println();
   System.out.print("Add one element 0 and print out all current queue: ");
   queue.add(0);
   while (!queue.isEmpty()) {
     System.out.print(queue.remove() + "  ");
   }
 }