Ответ 1
1. Либо thread2, либо thread3. Нет гарантии:
Кроме того, не следует делать никаких предположений о порядке, в котором потокам предоставляется право собственности на монитор или порядок, в котором потоки просыпаются в ответ на метод уведомления или уведомления.
http://docs.oracle.com/javase/1.5.0/docs/guide/vm/thread-priorities.html#general
2. Мониторы Java (synchronized/await/notify/notifyAll) не соответствуют действительности. У примитивов синхронизации из java 1.5 обычно есть параметры для обеспечения справедливости. Имейте в виду, что справедливая версия имеет значительно более высокую производительность, обычно следует использовать не справедливую версию: статистически, каждому потоку будет предоставлена возможность запускать, даже если заказ не будет строго соблюден.
Программы, использующие удаленные блокировки, к которым обращаются многие потоки, могут отображать более низкую общую пропускную способность (т.е. медленнее, часто намного медленнее), чем те, которые используют настройку по умолчанию, но имеют меньшие отклонения во времени, чтобы получить блокировки и гарантировать отсутствие голода. Обратите внимание, однако, что справедливость блокировок не гарантирует справедливость планирования потоков. Таким образом, один из многих потоков, использующих справедливую блокировку, может получать его несколько раз подряд, тогда как другие активные потоки не развиваются и в настоящее время не удерживают блокировку. Также обратите внимание, что метод untimed tryLock не соблюдает настройку справедливости. Это будет успешным, если блокировка будет доступна, даже если другие потоки ждут.
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReentrantLock.html#ReentrantLock%28boolean%29