บทความนี้วิเคราะห์การใช้งานและการใช้งานพร้อมกันใน Java โดยละเอียด แบ่งปันสำหรับทุกคนสำหรับการอ้างอิงของคุณ การวิเคราะห์เฉพาะมีดังนี้:
1. คอนเทนเนอร์แบบซิงโครนัสประกอบด้วยสองส่วน: เวกเตอร์และแฮช
อื่น ๆ เป็นคลาสบรรจุภัณฑ์แบบซิงโครนัสซึ่งสร้างขึ้นโดยคอลเลกชัน คอนเทนเนอร์แบบซิงโครนัสสัมภาษณ์ทุกรัฐของภาชนะเพื่อให้ได้ความปลอดภัยของด้าย
พวกเขามีปัญหาต่อไปนี้:
A) สำหรับการดำเนินการจำเป็นต้องมีการป้องกันการล็อคเพิ่มเติม ตัวอย่างเช่นการวนซ้ำเงื่อนไขที่ขาดหายไปเช่นการเพิ่ม
B) ToString, HashCode, Equals จะเรียกซ้ำ ๆ ทางอ้อมและคุณต้องให้ความสนใจกับการเกิดขึ้นพร้อมกัน
2. คอนเทนเนอร์พร้อมกันใน Java5.0
ConcurrentHashMap สามารถแทนที่การใช้งานแผนที่แบบซิงโครนัส
เมื่อมีการอ่านเป็นหลัก CopyOnWriteArrayList คือการใช้งานรายการแบบซิงโครนัส
ในเวลาเดียวกันคิวและการปิดกั้น: concurentlinkedqueue: FIFO Queue
PriorityQueue: คิวลำดับความสำคัญไม่ใช่
BlockingQueue เพิ่มการปิดกั้นและการเข้ามาของการปิดกั้น
A) ConcurenthashMap: มันไม่ใช่ล็อคสาธารณะ แต่เป็นล็อคแยกต่างหาก สามารถเข้าถึงเธรดการอ่านจำนวนเท่าใดก็ได้พร้อมกันผู้อ่านและนักเขียนยังสามารถเข้าถึงแผนที่พร้อมกันได้และจำนวนการเขียนที่ จำกัด สามารถแก้ไขแผนที่พร้อมกันได้ อย่างไรก็ตามขนาดและภาษา isempty นั้นอ่อนแอลงซึ่งประมาณไว้
b) CopyOnWriteArrayList: Iterator ยังคงอ้างอิงการอ้างอิงอาร์เรย์ฐานด้านล่างและการอ้างอิงจะไม่ถูกแก้ไข
3. ซิงโครไนเซอร์
a) Countdownlatch พารามิเตอร์ตัวสร้างคือ n หลังจากการนับถอยหลัง, n คือ 0 และเธรดรอทั้งหมดยังคงดำเนินการต่อไป
b) FutureTask: คำนวณ Runnable ซึ่งสามารถนำไปใช้งานได้โดย callable และสามารถดำเนินการผลลัพธ์ได้ รวมถึง: รอวิ่งและเสร็จสมบูรณ์
c) Semaphore: จำนวนกิจกรรมที่สามารถเข้าถึงได้ในเวลาเดียวกัน
D) Cyclicbarrier: คล้ายกับ atresia ล็อคกำลังรอเหตุการณ์และระดับกำลังรอเธรดอื่น ๆ เริ่มต้น N, Runnable R, N เธรดกำลังรอ ()
หวังว่าบทความนี้จะเป็นประโยชน์กับการออกแบบโปรแกรม Java ของทุกคน