Вы описываете модель «производитель-потребитель».
Это реализации Java, описанные в многочисленных книгах Java, в том числе М.Гранд "Образцы в Java. Том I" и "Java 2: Полный справочник" Нотона и Шильдта.
Основная идея: оба потока должны использовать 1 монитор (т.е. их код должен быть внутри synchronized(monitor) {}
блоков). Вам также нужна переменная-флаг, которая должна указывать, какой из двух потоков должен работать в данный момент.
Когда один из ваших потоков находится в синхронизированном блоке, он должен проверить переменную флага, не пора ли он выполнять работу. Если да, дайте ему поработать, затем измените значение флага, а затем уведомите все ожидающие потоки. Если нет, то стоит подождать.