खैर यह लगभग 9 साल हो गया है क्योंकि मैंने इसे मूल रूप से पोस्ट किया है और ईमानदार होने के लिए, जावा ने तब से कुछ सुधार किया है। मैं अपना मूल उत्तर नीचे छोड़ दूंगा, लेकिन लोगों को इसमें क्या करना है, इसकी कोई आवश्यकता नहीं है। 9 साल पहले, कोड समीक्षा के दौरान मैंने सवाल किया होगा कि उन्होंने ऐसा क्यों किया और शायद इसे मंजूरी दे दी, शायद नहीं। आधुनिक लैम्ब्डा उपलब्ध होने के साथ, यह एक गैर-अनुमानित दृष्टिकोण की सिफारिश करने वाले इस तरह के अत्यधिक मतदान के जवाब के लिए गैर जिम्मेदाराना है (जो कि, सभी निष्पक्षता में, इसके साथ शुरू करने के लिए संदिग्ध था ...) आधुनिक जावा में, उस कोड की समीक्षा तुरंत अस्वीकार कर दी जाएगी, और यह होगा सुझाव दिया:
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>
।