Olá, Ricardo!
Sim, é obrigatório. Todo o método necessita dos parêntesis, mesmo que não tenha nenhum parâmetro. Os parêntesis indicam que uma ação a ser executada ou condição a ser verificada.
No seu código você tem parêntesis em alguns lugares que mostram isso.
Na primeira linha tem o new Thread( que você chama o construtor da classe Thread que recebe uma referência de Runnable.
Ainda na primeira linha também tem o new Runnable() indicando que você está chamando o método sem argumentos da classe Runnable.
Na segunda linha, você sobrescreve o método run() da classe Runnable que você instanciou na primeira linha mencionado aí em cima.
Ainda na segunda linha, você também executa o método println da classe PrintStream que tem vários overloads do método podendo receber vários tipos de argumentos. Para maiores informações: https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html
Na terceira linha, você chama o método start da classe Thread.
E na quarta linha você novamente chama o construtor de Thread, o println de PrintStream e o start de Thread.
Nenhum destes métodos ou construtores funcionariam sem os parêntesis, mesmo os que não recebem nenhum argumento.
Ajudou?