บนแพลตฟอร์ม Java บทบาทที่ใช้การโทรแบบอะซิงโครนัสมีสามบทบาทดังต่อไปนี้: ข้อมูลจริงของผู้โทรใน Bill of Lading
เมื่อผู้โทรเรียกร้องการดำเนินการที่ใช้เวลานานและไม่สามารถส่งคืนข้อมูลได้ทันทีเขาจะส่งคืนใบรับรองการเรียกเก็บเงินก่อน
ไปที่ร้านเค้กเพื่อซื้อเค้กคุณไม่จำเป็นต้องรอให้เค้กทำ (สมมติว่าใช้เวลานานกว่าจะทำ) คุณเพียงแค่ต้องได้รับใบรับรอง (ไปทำอย่างอื่น) . เมื่อเค้กพร้อมคุณจะได้รับใบถือของเค้กก็โอเค
คลาสสาธารณะ main {โมฆะคงที่หลัก (สตริง [] args) {system.out.println ("เริ่มต้นหลัก") โฮสต์ = โฮสต์ใหม่ (); data2 = host.request (20, 'b'); catch (interruptedException e) {} system.out.println ("Main otherjob end"); data2 .getContent ());
ชั้นเรียนหลักที่นี่เทียบเท่ากับ "ลูกค้า" และโฮสต์เทียบเท่ากับ "ร้านเค้ก" เทียบเท่ากับการหยิบสินค้า หลังจากระยะเวลาหนึ่ง (หลังจากนอนหลับเป็นระยะเวลาหนึ่ง) โทร data1.getContent () ซึ่งหมายถึงการได้รับใบตราส่งสินค้าเพื่อให้ได้ผลการดำเนินการ
มาดูกันว่าร้านเค้กทำอะไรหลังจากที่ลูกค้าสั่งเค้ก:
โฮสต์ระดับสาธารณะ {คำขอข้อมูลสาธารณะ (จำนวน int สุดท้าย, Final Char C) {System.out.println ("คำขอ (" + count + "," + c + ")); Entity Final FutureData Future = New FutureData (); ชั้นเรียนชั้นใน realdata realdata = ใหม่ realdata (count, c); // (3) ดึงเอนทิตี FutureData เป็นอนาคตคืนค่าผลตอบแทน;}}
หลังจากได้รับคำขอโฮสต์ ("ร้านเค้ก") กลายเป็นอนาคตของ "Book of Lading" Futuredata จากนั้นสั่ง "ผู้ผลิตเค้ก" Realdata เพื่อทำเค้ก . จากนั้นสิ่งที่โฮสต์กลับมาให้กับลูกค้าเป็นเพียงอนาคต "Book of Lading" ไม่ใช่เค้ก หลังจากทำเค้กเสร็จแล้วผู้ผลิตเค้กสามารถให้เค้ก "Book of Lading" ที่สอดคล้องกันนั่นคือ Future.setrealdata (realdata)
มาดูกันว่าเค้กทำเค้กได้อย่างไร:
สร้างสตริงที่มีอักขระนับ C
Public Class Realdata ใช้ข้อมูล {เนื้อหาสตริงสุดท้ายส่วนตัว; buffer = ใหม่ [count]; .println ("การทำ realdata (" + count + "," + c + ") สิ้นสุด");
ทีนี้ลองมาดูกันว่าอนาคต "Bill of Lading" สอดคล้องกับ "เนื้อหา" ของเค้ก:
Public Class FutureData ใช้ข้อมูล {Private realdata realdata = null บูลีนส่วนตัว ready = false; } this.realdata = realdata; ();}}
หลังจากที่ลูกค้าทำธุรกิจของตัวเองเสร็จสิ้นเขาจะใช้ "Book of Lading" ของเขาเองเพื่อรับเค้ก:
System.out.println ("data1 =" + data1.getContent ());
หากเค้กยังไม่พร้อมคุณต้องรอ:
ในขณะที่ (! พร้อม) {ลอง {รอ ();
การวิเคราะห์โปรแกรม
สำหรับแต่ละคำขอโฮสต์จะสร้างเธรดซึ่งรับผิดชอบในการสร้าง "เค้ก" ที่ลูกค้าต้องการ หลังจากรอสักครู่หากเค้กยังไม่พร้อมลูกค้าจะต้องรอ ลูกค้าสามารถนำเค้กออกไปได้จนกว่า "ทำเค้ก" นั่นคือ Future.setrealdata (realdata)
แต่ละเธรดมีหน้าที่รับผิดชอบในการทำ "เค้ก" ที่ลูกค้าต้องการ นั่นคือลูกค้า A สอดคล้องกับ Cake Master A และลูกค้า B สอดคล้องกับ Cake Master B. แม้ว่าเค้กของลูกค้า B จะเตรียมไว้ก่อนลูกค้าสามารถรอเฉพาะเค้กมาสเตอร์ A เพื่อเตรียมเค้ก กล่าวอีกนัยหนึ่งไม่มีความสัมพันธ์ระหว่างลูกค้า
สองวิธีของ futuredata ถูกตั้งค่าให้ซิงโครไนซ์ ไม่สำคัญว่าเค้กจะพร้อมหรือไม่
นี่คือบทความนี้