Почему потоки в Java ведут себя так неочевидно?
Все очевидно и результат правильный.
В чем проблема-то ?
По логике при запуске потока должен вывести то, что что внутри потока.
По логике, не должен. Просто ты пока не понял логики многопоточности. 
Синхронизаций-то никаких нет, значит нет гарантий, что побочный тред напечатает раньше, чем главный. Хочешь дождаться завершения треда - используй семафоры, например. Нужен результат - используй Future.