Прошло уже почти 9 лет с тех пор, как я опубликовал это, и, честно говоря, с тех пор Java сделала несколько улучшений. Я оставлю свой оригинальный ответ ниже, но людям не нужно делать то, что в нем. 9 лет назад, во время проверки кода, я бы спросил, почему они это сделали, и, возможно, одобрил, а может и нет. С доступными современными лямбдами, безответственно иметь такой высоко голосованный ответ, рекомендующий устаревший подход (который, честно говоря, был сомнительным для начала ...) В современной Java этот обзор кода был бы немедленно отклонен, и это было бы предложил:
void foo(final String str) {
Thread t = new Thread(() -> someFunc(str));
t.start();
}
Как и прежде, такие детали, как осмысленная обработка этой темы, оставлены читателю в качестве упражнения. Но, прямо скажем, если вы боитесь использовать лямбды, вам следует еще больше бояться многопоточных систем.
Оригинальный ответ, просто потому что:
Вы можете объявить класс прямо в методе
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>
.