আচ্ছা, আমি মূলত এটি পোস্ট করার পরে প্রায় 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>
।