Sudah hampir 9 tahun sejak saya memposting ini dan sejujurnya, Java telah membuat beberapa perbaikan sejak itu. Saya akan meninggalkan jawaban asli saya di bawah, tetapi tidak perlu bagi orang untuk melakukan apa yang ada di dalamnya. 9 tahun yang lalu, selama tinjauan kode saya akan mempertanyakan mengapa mereka melakukannya dan mungkin menyetujuinya, mungkin tidak. Dengan lambda modern tersedia, itu tidak bertanggung jawab untuk memiliki jawaban yang sangat tinggi merekomendasikan pendekatan kuno (yang, pada semua keadilan, meragukan untuk memulai dengan ...) Di Jawa modern, bahwa tinjauan kode akan segera ditolak, dan ini akan menjadi menyarankan:
void foo(final String str) {
Thread t = new Thread(() -> someFunc(str));
t.start();
}
Seperti sebelumnya, detail seperti menangani utas itu dengan cara yang bermanfaat dibiarkan sebagai latihan bagi pembaca. Tapi terus terang, jika Anda takut menggunakan lambdas, Anda harus lebih takut dengan sistem multi-threaded.
Jawaban asli, hanya karena:
Anda bisa mendeklarasikan kelas tepat di metode
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>
.