Multi threaded Producer Consumer with bounded buffer
Suggest adding final to the QUEUE_SIZE constant and the collection instance also.

synchronized usage for protecting the ArrayDeque collection from concurrent access, but ArrayDeque is not thread safe. Perhaps two threads, one calls getWork() and another the addWorkItem(Integer i). Suggest using a thread safe collection instead of ArrayDeque.

Multiple threads may not always have access to System.out. Instead can use a concurrent logger or other mechanism to capture output, or have each thread write to a thread safe collection as an instance in ConsumerProducer1. Another option is having a Callable that returns desired output as a String, with the main routine the only thread accessing System.out and echoing that result.