"runnable" ใน Java คืออะไรในแง่ของคนธรรมดา? ฉันเป็นนักเรียนเขียนโปรแกรม AP ในโรงเรียนมัธยมซึ่งได้รับมอบหมายให้ทำวิจัยหรือค้นหาว่า "runnable" จากผู้อื่น (เราเพิ่งเข้าสู่ OOP และยังไม่ได้แตะเธรด)
"runnable" ใน Java คืออะไรในแง่ของคนธรรมดา? ฉันเป็นนักเรียนเขียนโปรแกรม AP ในโรงเรียนมัธยมซึ่งได้รับมอบหมายให้ทำวิจัยหรือค้นหาว่า "runnable" จากผู้อื่น (เราเพิ่งเข้าสู่ OOP และยังไม่ได้แตะเธรด)
คำตอบ:
โดยทั่วไปแล้ว Runnable เป็นประเภทของคลาส (Runnable คืออินเทอร์เฟซ) ที่สามารถใส่ลงในเธรดโดยอธิบายถึงสิ่งที่เธรดควรทำ
ส่วนต่อประสานที่รันได้ต้องการของคลาสเพื่อใช้วิธีการrun()
ดังนี้:
public class MyRunnableTask implements Runnable {
public void run() {
// do stuff here
}
}
แล้วใช้มันดังนี้:
Thread t = new Thread(new MyRunnableTask());
t.start();
หากคุณไม่มีRunnable
อินเทอร์เฟซคลาส Thread ซึ่งมีหน้าที่ในการเรียกใช้งานเนื้อหาของคุณในเธรดอื่นจะไม่มีสัญญาว่าจะหาrun()
วิธีการในคลาสของคุณดังนั้นคุณอาจได้รับข้อผิดพลาด นั่นคือเหตุผลที่คุณต้องติดตั้งอินเทอร์เฟซ
โปรดทราบว่าคุณไม่จำเป็นต้องกำหนดคลาสตามปกติคุณสามารถทำแบบอินไลน์ได้ทั้งหมด:
Thread t = new Thread(new Runnable() {
public void run() {
// stuff here
}
});
t.start();
สิ่งนี้คล้ายกับข้างต้นเพียง แต่คุณไม่ได้สร้างคลาสที่มีชื่ออื่น
run
เมธอดจะเสร็จสิ้นจากนั้นเธรดจะถูกปิด ถ้าคุณต้องการให้เธรดทำงานซ้ำไปซ้ำมาให้วางลูปไว้ในrun
เมธอด
new Thread(() -> System.out.println("hello from other thread")).start();
Runnable
เป็นอินเทอร์เฟซที่กำหนดดังนี้:
interface Runnable {
public void run();
}
หากต้องการสร้างคลาสที่ใช้เพียงกำหนดคลาสเป็น (public) class MyRunnable implements Runnable {
สามารถใช้งานได้โดยไม่ต้องสร้าง Thread ใหม่ โดยพื้นฐานแล้วเป็นอินเทอร์เฟซพื้นฐานของคุณด้วยวิธีการเดียวเรียกใช้ที่สามารถเรียกได้
หากคุณสร้างเธรดใหม่โดยใช้พารามิเตอร์รันได้มันจะเรียกใช้วิธีการรันในเธรดใหม่
นอกจากนี้ควรสังเกตด้วยว่าเธรดใช้งานRunnable
ได้และจะถูกเรียกใช้เมื่อเธรดใหม่ถูกสร้างขึ้น (ในเธรดใหม่) การใช้งานเริ่มต้นเพียงแค่เรียกสิ่งที่รันได้ที่คุณมอบให้ในตัวสร้างซึ่งเป็นเหตุผลที่คุณสามารถทำได้new Thread(someRunnable)
โดยไม่ต้องแทนที่run
วิธีการของเธรด
Thread
เธรดพูลเป็นเรื่องยากและหากคุณไม่ใช้เธรดพูลคุณจะต้องเสียค่าใช้จ่ายจำนวนมากในการสร้างเธรดใหม่ตลอดเวลา ในทางตรงกันข้ามการใช้งานRunnable
หมายความว่าคุณสามารถใช้สิ่งต่างๆเช่นThreadPoolExecutorService
หรือพูลเธรดของบุคคลที่สามได้อย่างง่ายดาย