Что ж, прошло почти 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();
}
person
corsiKa
schedule
02.05.2011
Consumer<T>
. - person Alex78191   schedule 25.02.2019Consumer<T>
- person Epaga   schedule 09.01.2020