มัลติเธรดเป็นเรื่องที่หลีกเลี่ยงไม่ได้และสำคัญใน Java ด้านล่างเราจะพัฒนาการเรียนรู้ของมัลติเธรด เนื้อหาต่อไปนี้เป็นคำอธิบายของเนื้อหามัลติเธรด Java ก่อน "การเพิ่มแพ็คเกจ JUC ใน JDK" ซึ่งรวมถึงอินเทอร์เฟซเช่น WAIT (), แจ้งเตือน () ในคลาสวัตถุ;
หมายเหตุ: แพ็คเกจ JUC หมายถึงแพ็คเกจ java.util.concurrent ซึ่งทำโดย Java Master Doug Lea และเพิ่มลงใน Java ใน JDK 1.5 เวอร์ชัน
ก่อนที่จะเข้าสู่การศึกษาบทต่อไปนี้ก่อนอื่นให้เข้าใจแนวคิดที่เกี่ยวข้องของการมัลติเธรด
แผนภาพสถานะเธรด
ภาพประกอบ:
เธรดรวมถึง 5 สถานะต่อไปนี้
1. สถานะใหม่: หลังจากสร้างวัตถุเธรดแล้วมันจะเข้าสู่สถานะใหม่ ตัวอย่างเช่นเธรดเธรด = เธรดใหม่ ()
2. Runnable: ยังเป็นที่รู้จักกันในชื่อ "สถานะการดำเนินการ" หลังจากสร้างวัตถุเธรดเธรดอื่น ๆ เรียกเมธอดเริ่มต้น () ของวัตถุเพื่อเริ่มเธรด ตัวอย่างเช่น thread.start () เธรดในสถานะพร้อมอาจถูกกำหนดให้ดำเนินการโดย CPU ได้ตลอดเวลา
3. สถานะการรัน (กำลังทำงาน): เธรดได้รับสิทธิ์ CPU สำหรับการดำเนินการ ควรสังเกตว่าเธรดสามารถป้อนสถานะการทำงานจากสถานะพร้อมเท่านั้น
4. สถานะที่ถูกบล็อก: สถานะที่ถูกบล็อกหมายความว่าเธรดจะให้สิทธิ์การใช้งาน CPU ด้วยเหตุผลบางอย่างและหยุดทำงานชั่วคราว มันไม่ได้จนกว่าเธรดจะเข้าสู่สถานะพร้อมที่จะมีโอกาสไปที่สถานะการวิ่ง การอุดตันมีสามประเภท:
(01) รอบล็อก - โดยเรียกเมธอดการรอของเธรด () ให้เธรดรอให้เสร็จงานบางอย่าง
(02) การปิดกั้นแบบซิงโครไนซ์-เธรดไม่สามารถรับการล็อคซิงโครไนซ์ซิงโครไนซ์ (เนื่องจากล็อคถูกครอบครองโดยเธรดอื่น ๆ ) มันจะเข้าสู่สถานะการปิดกั้นแบบซิงโครไนซ์
(03) การปิดกั้นอื่น ๆ-เธรดจะเข้าสู่สถานะการบล็อกโดยเรียก Sleep () หรือเข้าร่วม () ของเธรดหรือออกคำขอ I/O เมื่อสถานะการนอนหลับ () หมดเวลาเข้าร่วม () รอให้เธรดยุติหรือหมดเวลาหรือการประมวลผล I/O เสร็จสิ้นเธรดจะกลับเข้าสู่สถานะพร้อมอีกครั้ง
5. สถานะ Dead: เธรดเสร็จสิ้นการดำเนินการหรือออกจากวิธีการเรียกใช้ () เนื่องจากข้อยกเว้นและเธรดจะสิ้นสุดวัฏจักรชีวิต
เนื้อหาที่เกี่ยวข้องใน 5 สถานะเหล่านี้รวมถึงคลาสวัตถุเธรดและคำหลักที่ซิงโครไนซ์ เราจะเรียนรู้เนื้อหาเหล่านี้ทีละคนในบทต่อไปนี้
คลาสวัตถุกำหนดฟังก์ชั่นการนอนหลับ/ตื่นเช่น wait (), แจ้ง (), notifyall () ฯลฯ
คลาสเธรดกำหนดฟังก์ชั่นการทำงานของเธรดคอลัมน์ ตัวอย่างเช่นฟังก์ชั่นการนอนหลับ sleep (), interrupt () ฟังก์ชั่นขัดจังหวะ, getName () รับชื่อเธรด ฯลฯ
ซิงโครไนซ์เป็นคำหลัก ฟังก์ชั่นของการซิงโครไนซ์คือการอนุญาตให้เธรดได้รับการล็อคการซิงโครไนซ์ของวัตถุ
เมื่อเราแนะนำการรอ (), แจ้ง () และวิธีการอื่น ๆ โดยละเอียดในภายหลังเราจะวิเคราะห์ว่าทำไม "รอ (), แจ้ง () และวิธีอื่น ๆ ควรกำหนดไว้ในคลาสวัตถุไม่ใช่คลาสเธรด"