เมื่อเร็ว ๆ นี้ฉันได้ดู goroutines ของ Goและคิดว่าคงจะดีถ้ามีอะไรที่คล้ายกันใน Java เท่าที่ฉันได้ค้นหาวิธีทั่วไปในการขนานการเรียกเมธอดคือทำสิ่งต่างๆเช่น:
final String x = "somethingelse";
new Thread(new Runnable() {
public void run() {
x.matches("something");
}
}).start();
นั่นไม่สง่างามมาก มีวิธีที่ดีกว่านี้หรือไม่? ฉันต้องการโซลูชันดังกล่าวในโปรเจ็กต์ดังนั้นฉันจึงตัดสินใจใช้คลาส wrapper ของฉันเองโดยใช้การเรียกเมธอด async
ฉันตีพิมพ์ระดับกระดาษห่อของฉันในJ-Go แต่ฉันไม่รู้ว่ามันเป็นทางออกที่ดีหรือเปล่า การใช้งานนั้นง่ายมาก:
SampleClass obj = ...
FutureResult<Integer> res = ...
Go go = new Go(obj);
go.callLater(res, "intReturningMethod", 10); //10 is a Integer method parameter
//... Do something else
//...
System.out.println("Result: "+res.get()); //Blocks until intReturningMethod returns
หรือน้อยกว่า verbose:
Go.with(obj).callLater("myRandomMethod");
//... Go away
if (Go.lastResult().isReady()) //Blocks until myRandomMethod has ended
System.out.println("Method is finished!");
ภายในฉันกำลังใช้คลาสที่ใช้ Runnable และทำงาน Reflection บางอย่างเพื่อรับวัตถุวิธีการที่ถูกต้องและเรียกใช้
ฉันต้องการความคิดเห็นเกี่ยวกับไลบรารีเล็ก ๆ ของฉันและในเรื่องของการสร้างวิธีการ async เรียกแบบนี้ใน Java ปลอดภัยจริงหรือ? มีวิธีที่ง่ายกว่านี้อยู่แล้วหรือไม่?