Это кажется произвольным решением, вероятно, учитывая, что не все операционные системы являются unixy в том смысле, что они позволяют программе возвращать код выхода.
Java можно было указать как C с кодом возврата int
из main
. Многопоточность не имеет значения, потому что только один поток первоначально запускает main, и его возвращаемое значение может быть тем, которое JVM возвращает ОС в ОС, независимо от того, когда другие потоки возвращаются и что они делают.
Это надумано, но если кто-то создал JVM, которая может запускать несколько Java-программ, каждая из которых имеет свой собственный main
, он может быть рассчитан на возвращение значения, возвращаемого последним main
, который будет вызван.
Наиболее разумное обоснование заключается в том, что самой JVM может потребоваться возвращать код выхода по собственным причинам, однако это обоснование противоречит положению System.exit(int)
, которое в точности переопределяет код возврата JVM. Учитывая это, нет никаких оснований для того, чтобы аналогичным образом разрешать main
возвращать int
также, как если бы последнее, что main
сделало, было System.exit(n)
В целом звучит как произвольное решение.