คำนำ
เมื่อเร็ว ๆ นี้ฉันกำลังทำหน้าที่ของสถิติคะแนนดั้งเดิม ผู้ใช้ตั้งค่าพารามิเตอร์ที่เกี่ยวข้องผ่านแผนกต้อนรับและนับแบบเรียลไทม์ในพื้นหลังและส่งคืนข้อมูล ค่อนข้างพูดยังมีฟังก์ชั่นทางสถิติมากมายดังนั้นขอสรุปได้ที่นี่
ประสบการณ์ผู้ใช้ที่ดีที่สุดคือการดำเนินการทุกครั้งสามารถแสดงข้อมูลแบบเรียลไทม์ ภายใน 3 วินาทีควรอยู่ในช่วงความอดทนของผู้ใช้ ดังนั้นการทำผลิตภัณฑ์ไม่เพียง แต่ต้องพิจารณาการออกแบบการโต้ตอบของผู้ใช้เท่านั้น
คุณสามารถดูสถิติ 5 ข้างต้นได้ โดยรวมแล้วยังมีสถิติมากมาย สิ่งที่สำคัญที่สุดคือการเป็นแบบเรียลไทม์เรียลไทม์และเรียลไทม์ (พูดสิ่งสำคัญสามครั้ง) เห็นได้ชัดว่างานเวลานั้นไม่สมจริง
ก่อนการเปลี่ยนแปลง
ตรรกะของโปรแกรม
รันงานตามลำดับ png
หลังจากการเปลี่ยนแปลง
ตรรกะของโปรแกรม
มัลติทาสก์การประมวลผลแบบขนาน
การประมวลผลแบบมัลติทาสกิ้งแบบขนานเหมาะสำหรับซีพียูหลายคอร์ งานมัลติเธรดที่ดำเนินการโดยซีพียูแบบคอร์เดี่ยวอาจต่อต้านได้ (การสลับบริบทและการสร้างเธรดและการทำลายล้างจะใช้ทรัพยากร) โดยเฉพาะอย่างยิ่งงานที่ต้องใช้ CPU
การใช้รหัส
รหัส Pseudo Statsdemo:
/*** สถิติการใช้มัลติทาสกิ้งแบบขนาน* ผู้สร้าง kebang.com* เวลาสร้าง 16 เมษายน 2018*/สถิติชั้นเรียนสาธารณะ {สุดท้ายคงที่ simpledateFormat SDF = ใหม่ SimpleDateFormat ("YYYY-MM-DD HH: MM: SS"); สตริงคงสุดท้าย starttime = sdf.format (วันที่ใหม่ ()); โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น InterruptedException {Countdownlatch latch = New Countdownlatch (5); // สองนักวิ่งสถิติสถิติ 1 = สถิติใหม่ ("Task A", 1000, latch); Stats Stats2 = สถิติใหม่ ("Task B", 2000, latch); Stats Stats3 = สถิติใหม่ ("Task C", 2000, latch); Stats Stats4 = สถิติใหม่ ("Task D", 2000, latch); Stats Stats5 = สถิติใหม่ ("Task E", 2000, latch); stats1.start (); // task a เริ่มดำเนินการ stats2.start (); // task b เริ่มดำเนินการ stats3.start (); // งาน C เริ่มดำเนินการ stats4.start (); // งาน d เริ่มดำเนินการ stats5 ดำเนินการเสร็จสมบูรณ์: " + sdf.format (วันที่ใหม่ ())); } สถิติคลาสคงที่ขยายเธรด {String StatSname; Int Runtime; Latch Countdownlatch; สถิติสาธารณะ (String StatSname, Int Runtime, CountdownLatch latch) {this.statsName = statSname; this.runtime = runtime; this.latch = latch; } โมฆะสาธารณะเรียกใช้ () {ลอง {system.out.println (statsname+ "สถิติเริ่มต้นที่"+ starttime); // จำลองภารกิจการดำเนินการตามเวลา thread.sleep (รันไทม์); System.out.println (StatSname + "Do Stats เสร็จสมบูรณ์ที่" + sdf.format (วันที่ใหม่ ())); latch.countdown (); // งานเดี่ยวสิ้นสุดตัวนับจะลดลงหนึ่ง} catch (interruptedException e) {e.printstacktrace (); -เนื่องจากเราต้องการส่งคืนสถิติแบบซิงโครนัสเราจึงใช้คลาส Countdownlatch ที่นี่ซึ่งเป็นคลาสเครื่องมือใหม่ที่เพิ่มเข้ามาใน Java 5 มันใช้งานง่ายมาก ขั้นตอนการใช้งานโดยละเอียดจะได้รับการอ้างอิงถึงรหัสหลอกข้างต้น
Countdownlatch ใช้เพื่อซิงโครไนซ์หนึ่งงานหรือมากกว่านั้นบังคับให้พวกเขารอชุดการดำเนินงานที่ดำเนินการโดยงานอื่นเพื่อให้เสร็จสมบูรณ์ การใช้งานทั่วไปของ Countdownlatch คือการแบ่งโปรแกรมออกเป็นงาน Solver อิสระและสร้าง Countdownlatch ด้วยค่า N เมื่องานแต่ละงานเสร็จสิ้นการนับถอยหลังจะถูกเรียกใช้สลักนี้และงานที่รอปัญหาจะแก้ไข
สำหรับการตีความซอร์สโค้ดเฉพาะคุณสามารถอ้างถึง: การวิเคราะห์ซอร์สโค้ดการวิเคราะห์ Countdownlatch
ซอร์สโค้ดโครงการ: https://gitee.com/52itstyle/spring-data-jpa
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น