Que tal essa solução?
Ele não usa a classe Thread, mas é concorrente e, de certa forma, faz exatamente o que você pede
ExecutorService pool = Executors.newFixedThreadPool(2); // creates a pool of threads for the Future to draw from
Future<Integer> value = pool.submit(new Callable<Integer>() {
@Override
public Integer call() {return 2;}
});
Agora, tudo o que você faz é dizer value.get()
sempre que precisar obter o valor retornado, o encadeamento é iniciado no exato segundo em que você fornece value
um valor, para que você nunca precise dizer threadName.start()
nada sobre ele.
O que Future
é, é uma promessa para o programa, você promete ao programa que obterá o valor de que precisa em um futuro próximo
Se você chamá .get()
-lo antes de terminar, o thread que o está chamando simplesmente esperará até que esteja concluído