自从我最初发布此文章至今已经快9年了,说实话,Java从那时起取得了一些进步。我将原始答案留在下面,但无需人们去做。9年前,在代码审查期间,我会质疑他们为什么这样做,也许批准了,也许没有。有了可用的现代lambda,如此高投票的答案就建议一种过时的方法是不负责任的(公平地说,这种方法从一开始就值得怀疑...)在现代Java中,该代码审查将被立即拒绝,这将是建议:
void foo(final String str) {
Thread t = new Thread(() -> someFunc(str));
t.start();
}
和以前一样,读者可以通过练习以有意义的方式处理线程等细节。但坦率地说,如果您担心使用lambda,则应该更担心多线程系统。
原始答案,仅因为:
您可以在方法中声明一个类
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>
。