Bem, já faz quase 9 anos desde que eu postei isso originalmente e, para ser sincero, o Java fez algumas melhorias desde então. Deixarei minha resposta original abaixo, mas não há necessidade de as pessoas fazerem o que está nele. Há 9 anos, durante a revisão de código, eu teria questionado por que eles fizeram e talvez tenham aprovado, talvez não. Com as lambdas modernas disponíveis, é irresponsável ter uma resposta tão votada recomendando uma abordagem antiquada (que, com toda a justiça, era duvidosa para começar ...) No Java moderno, essa revisão de código seria imediatamente rejeitada, e isso seria sugerido:
void foo(final String str) {
Thread t = new Thread(() -> someFunc(str));
t.start();
}
Como antes, detalhes como lidar com esse tópico de maneira significativa são deixados como um exercício para o leitor. Mas, para ser franco, se você tem medo de usar lambdas, deve ter ainda mais medo de sistemas multiencadeados.
Resposta original, apenas porque:
Você pode declarar uma classe diretamente no método
void Foo(String str) {
class OneShotTask implements Runnable {
String str;
OneShotTask(String s) { str = s; }
public void run() {
someFunc(str);
}
}
Thread t = new Thread(new OneShotTask(str));
t.start();
}
Consumer<T>
.