เป็นเวลาเกือบ 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();
}
Consumer<T>
ตอนนี้คุณสามารถใช้