Предыдущие постеры верны, что этот код не скомпилируется без завершения mb final. Для ссылочных типов final означает, что вы не можете изменить объект, на который ссылается переменная. не означает, что вы не можете изменить состояние этого объекта. Таким образом, вы не можете заставить mb ссылаться на другой экземпляр MutableBoolean , но setValue (...) будет вести себя как всегда. MutableBoolean.getValue () и MutableBoolean.setValue (...) должны быть синхронизированы, чтобы один поток мог видеть изменения друг друга.
Обратите внимание, что нет гарантии того, в каком порядке будут выполняться операторы в двух новых потоках. Вначале может выполняться либо t2, либо t1, либо инструкции могут чередоваться.
Ничто из этого не зависит от того факта, что mb является локальной переменной, за исключением требования, чтобы она была окончательной.
См. Параллелизм Java на практике для окончательного слова по этой теме.