Chà, đã gần 9 năm kể từ khi tôi đăng bài này và thành thật mà nói, Java đã có một vài cải tiến kể từ đó. Tôi sẽ để lại câu trả lời ban đầu của mình bên dưới, nhưng không cần mọi người làm những gì trong đó. 9 năm trước, trong quá trình xem xét mã tôi đã đặt câu hỏi tại sao họ làm điều đó và có thể phê duyệt nó, có thể không. Với lambdas hiện đại có sẵn, thật vô trách nhiệm khi có một câu trả lời được đánh giá cao như vậy đề xuất một cách tiếp cận cổ xưa (rằng, về mặt công bằng, đã bị nghi ngờ bắt đầu bằng ...) Trong Java hiện đại, đánh giá mã đó sẽ bị từ chối ngay lập tức, và điều này sẽ bị từ chối ngay lập tức đề nghị:
void foo(final String str) {
Thread t = new Thread(() -> someFunc(str));
t.start();
}
Như trước đây, các chi tiết như xử lý chủ đề đó một cách có ý nghĩa được để lại như một bài tập cho người đọc. Nhưng nói thẳng ra, nếu bạn sợ sử dụng lambdas, bạn thậm chí còn sợ hơn các hệ thống đa luồng.
Câu trả lời gốc, chỉ vì:
Bạn có thể khai báo một lớp ngay trong phương thức
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>
.