วงจรชีวิตของเธรดใน Java
ที่มา:
ปานกลาง บทความนี้กล่าวถึงสถานะวงจรการใช้งานที่แตกต่างกันของเธรดใน Java วงจรชีวิตของเธรดใน Java ส่วนใหญ่ประกอบด้วยการเปลี่ยนเป็นสถานะต่างๆ โดยเริ่มจากการเกิดเธรดและสิ้นสุดด้วยการสิ้นสุดเธรด เธรดพร้อมที่จะทำงานเมื่อมีการสร้างและเริ่มต้นโดยการเรียกเมธอดstart
()ใน คลาส
Thread เมื่อเรียกเมธอด
sleep()หรือ
wait() ของคลาส Thread เธรดจะไม่สามารถใช้งานได้ ในการจัดการเธรดโดยทางโปรแกรม การระบุสถานะของเธรดเป็นสิ่งสำคัญ มาทำความเข้าใจว่าวงจรชีวิตของเธรด Java กำหนดสถานะของเธรดอย่างไร นี่คือสิ่งที่เอกสาร Java พูดเกี่ยวกับสิ่งนี้: เธรดคือพาธการทำงานของโปรแกรมที่สามารถเข้าสู่หนึ่งในห้าสถานะในระหว่างวงจรชีวิต:
- ใหม่
- รันได้
- วิ่ง
- ถูกบล็อก
- ตาย
1. ใหม่ (สถานะทารกแรกเกิด)เกิดขึ้นเมื่อคุณสร้างวัตถุเธรดในคลาสเธรด โฟลว์ถูกสร้างขึ้นและอยู่ในสถานะ "เกิดใหม่" นั่นคือเมื่อเธรดถูกสร้างขึ้น เธรดจะเข้าสู่สถานะใหม่ แต่ ยังไม่ได้เรียกใช้เมธอด
start()บนอินสแตน ซ์
2. รันได้ สถานะนี้หมายความว่าเธรดพร้อมที่จะรัน เมื่อ เรียกใช้เมธอด
start()บนเธรดใหม่ ก็พร้อมที่จะเริ่มต้น ในสถานะนี้ เธรดจะรอจนกว่าโปรเซสเซอร์จะพร้อมใช้งาน (เวลา CPU) นั่นคือเธรดจะกลายเป็นคิว (ชุด) ของเธรดที่รอดำเนินการ
3. วิ่ง (สถานะวิ่ง) การดำเนินการหมายความว่าโปรเซสเซอร์ได้จัดสรรช่วงเวลาสำหรับเธรดที่จะดำเนินการ นี่คือสถานะที่เธรดดำเนินการฟังก์ชันจริง
4. ถูกบล็อก (สถานะถูกบล็อก) เธรดอยู่ในสถานะที่ถูกบล็อกเมื่อหยุดชั่วคราว เข้าสู่โหมดสลีป หรือรอสักครู่เพื่อให้ตรงตามเงื่อนไขที่กำหนด
5. สถานะมรณะ เงื่อนไขนี้เกิดขึ้นเมื่อ เมธอด
run()เสร็จสิ้นการดำเนินการตามคำแนะนำ เธรดจะหยุดหรือเข้าสู่สถานะตายโดยอัตโนมัติ กล่าวอีกนัยหนึ่ง เมื่อเธรดออกจาก เมธอด
run()เธรดนั้นจะยุติหรือกลายเป็นใช้งานไม่ได้
อินเทอร์เฟซการทำงานและวิธีการเริ่มต้นใน Java 8
ที่มา:
สื่อ ในบทความนี้ คุณจะได้เรียนรู้เกี่ยวกับการเปลี่ยนแปลงบางอย่างที่นำมาใช้ใน Java 8 ได้แก่ อินเทอร์เฟซการทำงานและวิธีการเริ่มต้น
วิธีการเริ่มต้นคืออะไร?
เรารู้ว่าคลาสนามธรรมสามารถมีวิธีนามธรรมและไม่ใช่นามธรรม (วิธีการที่นำไปใช้) แต่อินเทอร์เฟซนั้นเป็นนามธรรม 100% (วิธีการทั้งหมดเหล่านี้มีเพียงลายเซ็นและไม่มีการใช้งาน) แต่จะเป็นอย่างไรหากเราต้องการอินเทอร์เฟซแทนที่จะเป็นคลาสและฟังก์ชันทั่วไปในคลาสที่นำไปใช้งานทั้งหมด เนื่องจากโค้ดการใช้งานจะถูกทำซ้ำซ้ำแล้วซ้ำอีกในแต่ละคลาสที่ใช้อินเทอร์เฟซ เพื่อหลีก เลี่ยง ปัญหานี้ Java 8 ได้เพิ่ม คำหลัก
เริ่มต้น หากเรามีวิธีการที่ใช้ในอินเทอร์เฟซ จะต้องกำหนดคีย์เวิร์ดเริ่มต้นให้กับวิธีการนั้น มิฉะนั้นเราจะได้รับข้อผิดพลาดรันไทม์
อินเทอร์เฟซการทำงานคืออะไร?
อินเทอร์เฟซเชิงฟังก์ชันนั้นไม่มีอะไรนอกจากอินเทอร์เฟซที่มีวิธีนามธรรมวิธีเดียวและวิธีการมาตรฐานหรือแบบคงที่จำนวนเท่าใดก็ได้ ตัวอย่างของอินเทอร์เฟซการทำงานคือ Comparable ซึ่งมีวิธีนามธรรมวิธีหนึ่งคือcomparisonTo
() ในทางกลับกัน Runnable ก็มี เมธอด
run()และอื่นๆ นอกจากนี้เรายังสามารถแสดงอินเทอร์เฟซการทำงานโดยใช้คำอธิบายประกอบ @FunctionalInterface ช่วยให้มั่นใจได้ว่าอินเทอร์เฟซจะมีวิธีนามธรรมเพียงวิธีเดียวเท่านั้น:
@FunctionalInterface
public interface MyfunctionalInterface{
public void myabstractmethod();
public static void method1(){
}
public default void method2(){
}
}
ประเภทของอินเทอร์เฟซการทำงาน
Consumer - รับหนึ่งอาร์กิวเมนต์และไม่ส่งคืนอะไรเลย
- Consumer ทั้งสามรูปแบบ ได้แก่ DoubleConsumer, IntConsumer และ LongConsumer (ขึ้นอยู่กับประเภทของอาร์กิวเมนต์ที่ยอมรับ)
- Bi-Consumer - รับสองข้อโต้แย้งและไม่ส่งคืนอะไรเลย
ภาคแสดง - รับหนึ่งอาร์กิวเมนต์และส่งกลับค่าบูลีน
- ภาคแสดงสามรูปแบบ ได้แก่ DoublePredicate, IntPredicate และ LongPredicate (ขึ้นอยู่กับประเภทของอาร์กิวเมนต์ที่ยอมรับ)
- Bi-Predicate - รับสองอาร์กิวเมนต์และส่งกลับค่าบูลีน
ฟังก์ชั่น - รับหนึ่งอาร์กิวเมนต์และส่งคืนค่าหนึ่งค่า
- มีฟังก์ชันหลายเวอร์ชันให้เลือกใช้ในรูปแบบอาร์กิวเมนต์ โดยที่int , longและdoubleถูกใช้บ่อยที่สุด
- Bi-Function - รับสองอาร์กิวเมนต์และส่งคืนค่าหนึ่งค่า
- ตัวดำเนินการ Unary และ Binary ใช้ Function และ Bi-Function ตามลำดับ แต่เงื่อนไขเพิ่มเติมที่นี่คืออินพุตและเอาต์พุตจะต้องเหมือนกันและเป็นประเภทเดียวกัน
ซัพพลายเออร์ - ไม่ยอมรับอินพุตใดๆ แต่ส่งคืนค่าเดียว เวอร์ชันต่างๆ ของ Supplier: BooleanSupplier, IntSupplier, LongSupplier และ DoubleSupplier ซึ่งประเภทการส่งคืนเป็นค่าพื้นฐานที่สอดคล้องกัน
GO TO FULL VERSION