Я читал, что при отправке объекта в функцию / другой объект отправляется не сам объект, а его копия. Итак, при многопоточности у меня есть ArrayBlockingQueue размером один, и два класса - Producer и Consumer (которые являются расширениями Thread), которые соответственно читают и записывают данные следующим образом:
ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>();
Producer add = new Producer(queue);
Consumer show = new Consumer(queue);
Я посылаю не конструкторам саму переменную "queue", а ее копию. Итак, оба объекта имеют разные очереди, поэтому между этими двумя объектами не возникнет недопонимания, верно? Если да, зачем нам нужна синхронизация потоков? Если нет, то почему?