Bueno, han pasado casi 9 años desde que publiqué esto originalmente y, para ser honesto, Java ha realizado un par de mejoras desde entonces. Dejaré mi respuesta original a continuación, pero no hay necesidad de que la gente haga lo que contiene. Hace 9 años, durante la revisión del código, habría cuestionado por qué lo hicieron y tal vez lo aprobó, tal vez no. Con las lambdas modernas disponibles, es irresponsable tener una respuesta tan votada que recomiende un enfoque anticuado (que, para ser justos, era dudoso al principio ...) En Java moderno, esa revisión de código sería rechazada de inmediato, y esto sería sugirió:
void foo(final String str) {
Thread t = new Thread(() -> someFunc(str));
t.start();
}
Como antes, detalles como manejar ese hilo de manera significativa se dejan como ejercicio para el lector. Pero para decirlo sin rodeos, si tiene miedo de usar lambdas, debería tener aún más miedo de los sistemas de subprocesos múltiples.
Respuesta original, solo porque:
Puedes declarar una clase directamente en el 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>
.