さて、私が最初にこれを投稿してからほぼ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>
。