Gần đây, tôi đã xem xét các goroutines của Go và nghĩ rằng sẽ rất tuyệt nếu có thứ gì đó tương tự trong Java. Theo như tôi đã tìm kiếm, cách phổ biến để song song một cuộc gọi phương thức là thực hiện một số việc như:
final String x = "somethingelse";
new Thread(new Runnable() {
public void run() {
x.matches("something");
}
}).start();
Đó không phải là rất thanh lịch. Có cách nào tốt hơn để làm điều này không? Tôi cần một giải pháp như vậy trong một dự án vì vậy tôi quyết định triển khai lớp trình bao bọc của riêng mình xung quanh một cuộc gọi phương thức không đồng bộ.
Tôi đã xuất bản lớp trình bao bọc của mình trong J-Go . Nhưng tôi không biết đó có phải là một giải pháp tốt hay không. Cách sử dụng rất đơn giản:
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
hoặc ít dài dòng:
Go.with(obj).callLater("myRandomMethod");
//... Go away
if (Go.lastResult().isReady()) //Blocks until myRandomMethod has ended
System.out.println("Method is finished!");
Bên trong, tôi đang sử dụng một lớp triển khai Runnable và thực hiện một số công việc Reflection để lấy đối tượng phương thức chính xác và gọi nó.
Tôi muốn một số ý kiến về thư viện nhỏ của tôi và về chủ đề thực hiện các cuộc gọi phương thức không đồng bộ như thế này trong Java. Nó có an toàn không? Đã có một cách đơn giản hơn?