code: public static <E> Deque<E> synchronizedDeque(Deque<E> deque) {
      return Synchronized.deque(deque, null);
    }
docs: Returns a synchronized (thread-safe) deque backed by the specified deque. In order to guarantee
  serial access, it is critical that <b>all</b> access to the backing deque is accomplished
  through the returned deque.
  
  <p>It is imperative that the user manually synchronize on the returned deque when accessing any
  of the deque's iterators:
  
  <pre>{@code
  Deque<E> deque = Queues.synchronizedDeque(Queues.<E>newArrayDeque());
  ...
  deque.add(element);  // Needn't be in synchronized block
  ...
  synchronized (deque) {  // Must synchronize on deque!
  Iterator<E> i = deque.iterator(); // Must be in synchronized block
  while (i.hasNext()) {
  foo(i.next());
  }
  }
  }</pre>
  
  <p>Failure to follow this advice may result in non-deterministic behavior.
  
  <p>The returned deque will be serializable if the specified deque is serializable.
  
  @param deque the deque to be wrapped in a synchronized view
  @return a synchronized view of the specified deque
  @since 15.0