Come to Java multi-thread design mode
For a method that takes some time to execute, instead of waiting for the execution result to come out, it gets an alternative "Bill of Lading ".
Use Asynchronous Method call to separate the prepared and returned values.
Public Class Main { Public Static Void Main (string [] ARGs) {system. Out. println (" Main begin "); Host = New Host (); Data data1 = host. request (10, 'A'); Data data2 = host. request (20, 'B'); Data data3 = host. request (30, 'C '); System. Out. println (" Main otherjob begin ");Try {Thread. Sleep (2000 );} Catch (Interruptedexception e) {} system. Out. println (" Main otherjob end "); System. Out. println (" Data1 = "+ Data1.getcontent (); system. Out. println (" Data2 = "+ Data2.getcontent (); system. Out. println (" Data3 = "+ Data3.getcontent (); system. Out. println (" Main end ");}}
Public Class FuturedataImplements Data { Private Realdata = Null ; Private Boolean Ready = False ; Public Synchronized Void Setrealdata (realdata ){ If (Ready ){ Return ; // Balk }This . Realdata = realdata; This . Ready = True ; Policyall ();} Public Synchronized String getcontent (){ While(! Ready ){Try{Wait ();}Catch(Interruptedexception e ){}} Return Realdata. getcontent ();}}
Host class
Public Class Host {PublicData Request (Final IntCount,Final CharC) {System. Out. println (" Request ( "+ Count +" , "+ C +" ) Begin "); // (1) Establish the object of futuredata Final Futuredata future = New Futuredata (); // (2) Start a new thread to establish the realdata entity New Thread (){ Public Void Run (){ Realdata =NewRealdata (count, c); future. setrealdata (realdata ); }. Start (); system. Out. println (" Request ( "+ Count +" , "+ C +" ) End "); // (3) retrieve the futuredata object as the return value Return Future ;}}