好吧,自从我最初发布这个以来已经快9年了,说实话,Java从那时起已经做了一些改进。我将在下面留下我的原始答案,但人们没有必要做其中的内容。9年前,在代码审查期间,我会质疑他们为什么这样做,也许批准了,也许没有。有了现代lambdas,有这样一个投票率很高的答案来推荐一种过时的方法是不负责任的(平心而论,一开始是可疑的......)在现代Java中,代码审查将立即被拒绝,这将被建议:
void foo(final String str) {
Thread t = new Thread(() -> someFunc(str));
t.start();
}
和以前一样,以有意义的方式处理该线程等细节留给读者作为练习。但坦率地说,如果你害怕使用lambdas,你应该更害怕多线程系统。
原始答案,只是因为:
您可以在方法中声明一个类
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();
}