ความหมายของการทำงานหนักคือ ในวันข้างหน้าคุณจะเห็นแต่คนและสิ่งของที่คุณชอบ!
ยินดีรับประเด็นและคำขอดึง เอกสารทั้งหมดเขียนเองครับ ถ้าคิดว่าดีก็ติดดาวเพื่อเป็นกำลังใจและกำลังใจได้นะครับ :)
บทความทั้งชุดเกี่ยวกับ Java Concurrency ประการแรก มันเป็นความสนใจของฉันเอง ประการที่สอง ส่วนนี้เป็นเรื่องยากมากที่จะเข้าใจในทางปฏิบัติ นอกจากนี้ มักถูกถามในระหว่างกระบวนการสัมภาษณ์ ดังนั้นในระหว่างกระบวนการเรียนรู้ ฉันจึงบันทึกความรู้พื้นฐานที่เกี่ยวข้องกับการทำงานพร้อมกันของ Java อันดับแรก ฉันสามารถสร้างระบบสำหรับความรู้ของฉันได้ และฉันก็หวังว่ามันจะเป็นประโยชน์กับผู้อื่นด้วย
เกี่ยวกับหัวข้อการทำงานพร้อมกันของ Java:
(1) มีความรู้พื้นฐานเกี่ยวกับการทำงานพร้อมกัน และแต่ละชื่อเรื่องเชื่อมโยงกับบทความเฉพาะ
(2) มีคำถามสัมภาษณ์สำหรับการรับสมัครช่วงฤดูใบไม้ร่วง การทำความเข้าใจจะช่วยให้คุณได้รับบางสิ่งบางอย่าง (และฉันหวังว่าทุกคนจะสามารถหางานที่คุณชื่นชอบได้ :))
(3) ในระหว่างขั้นตอนการอ่าน หากมีประโยชน์ โปรดยกนิ้วให้ฉัน ซึ่งเป็นกำลังใจสำหรับความพากเพียรในการเขียนโค้ดของฉัน
หมายเหตุ: โปรดระบุแหล่งที่มาของต้นฉบับเมื่อพิมพ์ซ้ำ ขอขอบคุณ!
ความรู้พื้นฐาน
1.1 ข้อดีและข้อเสียของการเขียนโปรแกรมพร้อมกัน
ประเด็นความรู้: (1) เหตุใดจึงต้องใช้การทำงานพร้อมกัน? (ข้อดี) (2) ข้อเสียของการเขียนโปรแกรมพร้อมกัน (3) แนวคิดที่สับสน
1.2 สถานะเธรดและการทำงานพื้นฐาน
คะแนนความรู้: (1) วิธีสร้างเธรดใหม่ (2) การแปลงสถานะเธรด;
ทฤษฎีการเห็นพ้องต้องกัน (JMM)
โมเดลหน่วยความจำ Java และกฎที่เกิดขึ้นก่อน
คะแนนความรู้: (1) โครงสร้างหน่วยความจำ JMM; (2) การเรียงลำดับใหม่ (3) เกิดขึ้นก่อนกฎ
คำสำคัญที่เกิดพร้อมกัน
3.1 ให้คุณเข้าใจ Synchronized อย่างครบถ้วน
ประเด็นความรู้: (1) วิธีใช้การซิงโครไนซ์ (2) กลไกการตรวจสอบ (3) การซิงโครไนซ์เกิดขึ้นก่อนความสัมพันธ์ (4) การเพิ่มประสิทธิภาพการล็อค
3.2 ให้คุณเข้าใจความผันผวนได้อย่างถ่องแท้
ประเด็นความรู้: (1) หลักการดำเนินการ (2) การได้มาของความสัมพันธ์ที่เกิดขึ้นก่อน (3) ความหมายหน่วยความจำ (4) การใช้ความหมายหน่วยความจำ
3.3 คุณคิดว่าคุณเข้าใจขั้นสุดท้ายจริงๆ หรือไม่?
คะแนนความรู้: (1) วิธีใช้ (2) กฎการเรียงลำดับขั้นสุดท้าย (3) หลักการใช้งานขั้นสุดท้าย (4) การอ้างอิงขั้นสุดท้ายไม่สามารถ "ล้น" จากตัวสร้าง (การหลบหนีนี้)
3.4 สรุปคุณสมบัติหลักสามประการ: ความเป็นอะตอม ความเป็นระเบียบเรียบร้อย และการมองเห็น
คะแนนความรู้: (1) ความเป็นอะตอม: ซิงโครไนซ์ (2) การมองเห็น: ซิงโครไนซ์, ระเหยได้; (3) ความเป็นระเบียบเรียบร้อย: ซิงโครไนซ์, ระเหยได้
ระบบล็อค
4.1 การแนะนำครั้งแรกเกี่ยวกับ Lock และ AbstractQueuedSynchronizer (AQS)
คะแนนความรู้: (1) การเปรียบเทียบระหว่างการล็อคและการซิงโครไนซ์ (2) จุดประสงค์การออกแบบ AQS;
4.2 ความเข้าใจเชิงลึกของ AbstractQueuedSynchronizer (AQS)
คะแนนความรู้: (1) โครงสร้างข้อมูลของคิวการซิงโครไนซ์ AQS; (2) ล็อคพิเศษ; (3) ล็อคที่ใช้ร่วมกัน;
4.3 ทำความเข้าใจกับ ReentrantLock อีกครั้ง
ประเด็นความรู้: (1) หลักการดำเนินการของการล็อคแบบย้อนกลับ (2) หลักการดำเนินการของการล็อคอย่างยุติธรรม (3) หลักการดำเนินการของการล็อคที่ไม่เป็นธรรม (4) การเปรียบเทียบระหว่างการล็อคอย่างยุติธรรม
4.4 ความเข้าใจเชิงลึกเกี่ยวกับการล็อกการอ่าน-เขียน ReentrantReadWriteLock
คะแนนความรู้: (1) วิธีการแสดงสถานะการอ่านและการเขียน (2) การได้มาและการปล่อย WriteLock; (3) การได้มาและการปล่อย ReadLock; (4) กลยุทธ์การย่อยสลายการล็อค; สถานการณ์การใช้งาน
4.5 คำอธิบายโดยละเอียดเกี่ยวกับกลไกการรอของเงื่อนไขและการรอสัญญาณ/การแจ้งเตือน
ประเด็นความรู้: (1) ลักษณะเฉพาะเมื่อเปรียบเทียบกับกลไกการรอ/การแจ้งเตือนของออบเจ็กต์ (2) วิธีการที่สอดคล้องกับการรอ/การแจ้งของออบเจ็กต์ (4) หลักการดำเนินการรอ 6) การรวมกันของการรอคอยและสัญญาณ/สัญญาณทั้งหมด;
4.6 เครื่องมือ LockSupport
คะแนนความรู้: (1) ฟังก์ชั่นหลัก (2) ลักษณะเมื่อเปรียบเทียบกับการปลุกการบล็อกแบบซิงโครไนซ์;
ภาชนะที่เกิดขึ้นพร้อมกัน
5.1 คอนเทนเนอร์ที่เกิดขึ้นพร้อมกัน ConcurrentHashMap (JDK เวอร์ชัน 1.8)
ประเด็นความรู้: (1) คุณลักษณะที่สำคัญ (2) คลาสภายในที่เกี่ยวข้อง (4) วิธีการก่อสร้าง (6) รับกระบวนการดำเนินการ ( 8) กระบวนการดำเนินการของวิธีการนับขนาด (9) การเปรียบเทียบระหว่างเวอร์ชัน 1.8 ConcurrentHashMap และเวอร์ชันก่อนหน้า
5.2 CopyOnWriteArrayList ของคอนเทนเนอร์ที่เกิดขึ้นพร้อมกัน
คะแนนความรู้: (1) หลักการใช้งาน (2) ความแตกต่างระหว่าง COW และ ReentrantReadWriteLock; (3) สถานการณ์สมมติของแอปพลิเคชัน; (4) เหตุใดจึงมีความสอดคล้องที่อ่อนแอ;
5.3 ConcurrentLinkedQueue ของคอนเทนเนอร์ที่เกิดขึ้นพร้อมกัน
ประเด็นความรู้: (1) หลักการดำเนินการ (2) โครงสร้างข้อมูล (3) วิธีการหลัก (4) ความตั้งใจในการออกแบบการอัปเดตล่าช้า
5.4 ThreadLocal ของคอนเทนเนอร์ที่เกิดขึ้นพร้อมกัน
ประเด็นความรู้: (1) หลักการดำเนินการ (2) กำหนดหลักการของวิธีการ (3) รับหลักการของวิธีการ (5) ThreadLocalMap
บทความที่อธิบายปัญหาการรั่วไหลของหน่วยความจำ ThreadLocal ในเชิงลึกจากซอร์สโค้ด
ประเด็นความรู้: (1) หลักการการรั่วไหลของหน่วยความจำภายในเครื่อง (2) แนวทางปฏิบัติที่ดีที่สุดของ ThreadLocal; (3) สถานการณ์จำลองของแอปพลิเคชัน
5.5 BlockingQueue ของคอนเทนเนอร์ที่เกิดขึ้นพร้อมกัน
คะแนนความรู้: (1) การดำเนินการพื้นฐานของ BlockingQueue; (2) BlockingQueue ที่ใช้กันทั่วไป;
คำอธิบายโดยละเอียดเกี่ยวกับหลักการใช้งาน ArrayBlockingQueue และ LinkedBlockingQueue ในคอนเทนเนอร์ที่เกิดขึ้นพร้อมกัน
เธรดพูล (ระบบดำเนินการ)
6.1 หลักการใช้งานเธรดพูล
ประเด็นความรู้: (1) เหตุใดจึงต้องใช้เธรดพูล (2) กระบวนการดำเนินการ (3) ความหมายของแต่ละพารามิเตอร์ของตัวสร้าง (4) วิธีปิดเธรดพูล (5) วิธีกำหนดค่าเธรดพูล
6.2 ScheduledThreadPoolExecutor ของเธรดพูล
คะแนนความรู้: (1) โครงสร้างชั้นเรียน (2) วิธีการทั่วไป (3) ScheduledFutureTask;
6.3 สรุปการดำเนินงานพื้นฐานของ FutureTask
คะแนนความรู้: (1) สถานะต่างๆ ของ FutureTask; (2) รับวิธีการ (3) วิธีการยกเลิก (4) สถานการณ์การใช้งานของแอปพลิเคชัน;
คลาสการดำเนินการของอะตอม
7.1 สรุปคลาสการดำเนินการอะตอมมิกในแพ็คเกจอะตอมมิกใน Java
ประเด็นความรู้: (1) หลักการนำไปใช้งาน (2) ประเภทการอัพเดตอะตอมมิก (5) ประเภทฟิลด์การอัพเดตอะตอมมิก
เครื่องมือการทำงานพร้อมกัน
8.1 ในภาษาอังกฤษธรรมดา คลาสเครื่องมือการทำงานพร้อมกันของ Java-CountDownLatch, CyclicBarrier
คะแนนความรู้: (1) CountDownLatch; (2) CyclicBarrier; (3) การเปรียบเทียบระหว่าง CountDownLatch และ CyclicBarrier
8.2 คลาสเครื่องมือการทำงานพร้อมกันของ Java ในภาษาท้องถิ่น - Semaphore, Exchanger
จุดความรู้: (1) เซมาฟอร์ควบคุมการเข้าถึงทรัพยากร (2) การแลกเปลี่ยนข้อมูล
การปฏิบัติพร้อมกัน
9.1 บทความที่ช่วยให้คุณเข้าใจปัญหาของผู้ผลิต-ผู้บริโภคได้อย่างถ่องแท้
กราฟความรู้พร้อมกันของ JAVA
คุณสามารถย้ายไปยังหน้าต่างใหม่เพื่อขยายเพื่อการรับชมที่ดีขึ้นหรือดูภาพต้นฉบับได้
ลิงก์ไปยังรูปภาพต้นฉบับของกราฟความรู้ หากมีประโยชน์ คุณสามารถลอกแบบเพื่อใช้เองได้