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